首页 > 基础设施 > 正文

AIX环境的Java性能怎样才能表现最优?

2012-08-02 12:02:00  来源:IT专家网

摘要:Java面向对象语言,目前是比较流行的一种编程语言。而AIX操作系统可以支持多个Java版本,同时安装多个Java版本。那么在AIX环境的Java性能怎样才能表现最优本文告诉你。
关键词: Java

    Java 是一种面向对象的编程语言。它以 C++为模型,被设计成小的、简单的、在源和二进制级别跨平台的可移植的语言,Java 程序(applets和应用程序)可以运行于任何已经安装了 Java虚拟机(JVM)的机器上。Java相对其它计算机语言有显着的优势,适合于任何编程任务,Java 有以下优势:


    Java 是独立于平台的:Java 最显着的一个优势就是它轻易从一台计算机系统移动到另一台的能力。对于任何Web软件至关重要的就是在许多不同系统上运行同一个程序的能力, Java 成功之处在于在源和二进制级别能够独立于平台。


    Java 是面向对象的:Java的另外一个优点在于利用面向对象的方法。这允许你创建模块化程序和可重用代码。


    Java 容易学习:Java被设计成容易使用的语言,因此它更易于写、编译、调试以及学习。


    Java 是电子商务的解决方案:由于 Java的健壮性、使用方便、跨平台的能力和安全性特点,它已成为了提供世界范围内因特网解决方案的选择语言。


    2、AIX环境下的Java版本


    目前,AIX操作系统可以支持多个Java版本,可以在一个操作系统下同时安装多个Java版本,应用需要哪个版本时,可设置PATH路径到此版本所在的目录。以下是AIX可支持的Java版本信息:


    Java 1.1.8


    Java 1.2.2


    Java 1.3.0


    Java 1.3.1 32bit


    Java 1.3.1 64bit


    Java 1.4 32bit


    Java 1.4 64bit


    从性能来看,尽量使用高版本的AIX和高版本的Java,并且安装最新的操作系统和Java补丁包。当需要超过2GB的Java 堆时,需要使用64bit的Java.在AIX环境下,Java是免费使用的,可以从下列网址下载Java软件:


    http://www6.software.ibm.com/dl/dka/dka-p


    从下列网址下载AIX操作系统和Java的补丁包:


    http://techsupport.services.ibm.com/server/fixes.


    3、Java性能准则


    在编写Java应用程序时,以下是基本的准则:


    使用字符串缓冲区而不是字符串连接,当进行连续字符串操作时要避免不必要地创建那些最终必须经过垃圾回收的对象。


    避免连续写入Java控制台以减少字符串操作、文本格式化以及输出的花费。


    必要时通过使用变量的原语类型来避免对象创建和操作的花费。


    经常高速缓存用过的对象以减少必须的垃圾回收数量,并且避免重复创建对象的需求。


    尽可能分组本地操作以减少Java本地接口(JNI)的调用。


    只有在必要时再使用同步方法,以此限制在JVM和操作系统中的多任务。


    除非必要避免调用垃圾回收器。如果您必须调用它,只有在空闲时间或一些非关键阶段再这样做。[page]
    可能时使用整型而不是长整型,因为32位操作快于64位。


    可能时申明方法为final.JVM处理 inal的方法较好。


    当创建常量时为了减少变量需要初始化的次数,使用关键字static final.


    避免不必要的“casts”和“instanceof”引用,因为在Java中销毁操作不是在编译时而是在运行时执行的。


    当数组可以满足要求时尽可能避免使用向量。


    从向量末端添加和删除项以得到较高性能。


    使用 -O 选项编译Java文件。


    避免在循环中分配对象。


    使用缓冲区I/O并调优缓冲区大小。


    使用连接池和准备缓存声明进行数据库访问。


    使用连接池连接到数据库并重用连接而不是重复打开和关闭连接。


    最大化线程生存期并最小化线程创建和销毁循环。


    最小化共享资源的争用。


    最小化短生存期对象的创建。


    避免远程方法调用。


    使用回调以避免阻塞远程方法调用。


    避免创建只用来访问一个方法的对象。


    尽可能保持同步方法处于循环外。


    在数据库中以Unicode形式存储字符串和字符数据。


    记录CLASSPATH以便最常用的库先出现。


    4、监视Java


    在AIX操作系统中有许多工具可以用来监视Java应用程序的性能,以下是简单的概述。


    vmstat


    这条命令提供了各种系统资源的信息。它报告了运行队列以及等待队列中内核线程的统计信息、内存使用、页面调度空间、磁盘 I/O、中断、系统调用、上下文切换以及CPU活动。[page]
    iostat


    这条命令报告了详细的磁盘 I/O 信息。


    topas


    这条命令报告了 CPU、网络、磁盘 I/O、工作负载管理器和进程活动。


    tprof -k -s -e -x “sleep 10”


    这条命令可被用来剖析应用程序以查明任何可能影响性能的活动程序/方法。


    ps -mo 线程


    这条命令显示了一个进程或线程绑定于哪一个 CPU.


    Java -verbose:gc


    这个选项可被用来检查垃圾回收对您的应用程序的冲击。它报告了垃圾回收所花的总共时间,平均每一次垃圾回收花费时间,平均每一次垃圾回收收集的内存以及平均每一次垃圾回收中的对象数。


    5、Java应用程序性能调优


    建议在运行Java应用的AIX用户环境下,设置以下环境变量。


    AIXTHREAD_SCOPE=S


    用AIX 4.3.1启动,此变量缺省值为P.这表示进程宽度争用作用域(M:N)。对于 Java 应用程序,您应该设置这个值为 S,它表示系统宽度争用作用域(1:1)。


    AIXTHREAD_MUTEX_DEBUG=OFF


    用调试器为使用目的维持一个活动人工干预列表。


    AIXTHERAD_COND_DEBUG=OFF


    用调试器为使用目的维持一个条件变量列表。


    AIXTHREAD_RWLOCK_DEBUG=OFF


    pthreads 库用调试器为使用目的维护一个包含活动互斥锁定、条件变量以及读/写锁定的列表。当一个锁定初始化,如果列表中没有这一锁定,它被加入到列表中。此列表以链表形式实现,因此当列表变大时通过搜索它来确定一个锁定是否存在就包含了性能问题。问题是此列表被锁定保护,这一锁定在搜索操作过程中一直保持。当搜索进行时其它对pthread_mutex_init()调用的子例程必须等待。为了优化性能,您应当将此线程调试选项设置为OFF.它们的缺省值为ON .


    SPINLOOPTIME=500


    spinloop时间是一个进程在阻塞前在一个繁忙的锁定上可以循环的次数。这个值缺省设置为 40.如果 tprof 输出表明check_lock例程具有高的CPU使用率,并且如果通常锁定在短时间内可用,您应当通过将值设置为500或更高来提高循环时间。


    同样,运行Java应用的AIX用户环境下,推荐以下设置:


    l ulimit -d 不限制


    l ulimit -m 不限制


    l ulimit -n 不限制


    l ulimit -s 不限制


    操作系统内一定的环境参数和设置可以用来调优Java性能。同样,许多调优系统部件如 CPU、内存、网络、I/O 等等的技术,可以提高Java性能。


    为了使得Java的性能和可伸缩性尽可能的好,您应当使用最新可用版本的操作系统和Java,以及Just-In-Time(JIT)编译器。


    与Java相关的最普通的性能问题与垃圾回收机制有关。如果Java堆太大,则堆将必须驻留在主内存外。这将导致页面调度活动增加,它将影响Java性能。同样,一个大的堆可能花很多秒去填充。这意味着,尽管垃圾回收活动不频繁,但与垃圾回收相联系的暂停次数将增加。为了调优 Java 虚拟机(JVM)的堆,使用Java命令加选项 -ms 或 -mx.使用垃圾回收统计信息来帮助决定最佳设置。


第三十四届CIO班招生
国际CIO认证培训
首席数据官(CDO)认证培训
责编:zhangyexi

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。