技术开发 频道

JBoss性能调优和瘦身之JVM

【IT168 技术文档】

    根据机器配置和内存大小调整虚拟机的垃圾收集性能或者调整JDK5的垃圾收集性能; 

    在x86硬件使用Bea JRockit虚拟机; 

     使用64位的机器和支持64位的虚拟机来提供比通常2-4GB更大的堆,近来Sparc/SolarisSolaris 9(或者更高版本)、Itanium + JDK1.4、Linux x64 + JDK5已经能够提供64位支持; 

     如果不使用的32位地址(2-4GB)以上的堆空间,不要使用-d64(64位支持的选项);使用64位地址,在完成相同任务的情况下需要更多的内存,而且不能够为应用带来任何好处; 

     避免堆空间过大或过小(不能明确说明堆空间多大合适,因为这依赖于实际情况)。堆空间的大小影响代式垃圾的收集和扫描堆的时间;在堆空间较小的情况下,很难有效地进行性能调优(即使您的应用仅使用200M内存,如果采用并行垃圾收集策略和CMS,仍然需要使用512MB以上的堆空间),但是过大的堆空间将会在垃圾收集时需要更长的时间来扫描堆空间; 

     避免使用Sun 1.4虚拟机;JDK5特别是在垃圾收集方面比1.4有显著的改善,JRockit虚拟机在x86平台上性能非常好; 

     使用-server选项时,要么使用-XX:TheadStackSize=128k(Solaris),要么使用-Xss128k(其它平台),在Solaris上,-Xss128k没有任何作用(you can only set Larger thread stack size);这些设置将是线程使用更少的内存作为栈,从而能够创建更多的线程,但是在运行复杂的递归代码时栈空间的减少将可能导致栈溢出;当然,使用128k的栈也无可厚非; 

     理解垃圾收集器之间的区别,根据情况进行调整;并进行负载测试(OpenSTA、JMeter等)来确保选择合适的垃圾收集器; 

     最好使用多余2个处理器的多处理器计算机,并采用并行和并发的垃圾收集选项来获得非常好的性能和更高的垃圾收集吞吐量;但是只有真正理解了垃圾收集器的工作原理,才能做出合适的调整;JDK5完全能够自我调整; 

     调整JDK1.4的NewSize的缺省值,经验规则(原文:bad rule of thumb):设置为小于20%比较好;设置为大于20%将非常危险,因为它可能引起虚拟机错乱地进行完整的垃圾收集(full garbage collection),并且不会休眠或释放足够的空闲内存。JDK5似乎已经修正了这个Bug,而且在缺省值的设置上更加合理;

0
相关文章