4、监视 Java

在AIX 操作系统中有许多工具可以用来监视Java应用程序的性能,以下是简单的概述。
vmstat
这条命令提供了各种系统资源的信息。它报告了运行队列以及等待队列中内核线程的统计信息、内存使用、页面调度空间、磁盘 I/O、中断、系统调用、上下文切换以及 CPU 活动。
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。使用垃圾回收统计信息来帮助决定最佳设置。


相关内容