(转载请注明出处:
Java,JavaFX技术交流 http://javafxguy.iteye.com)
在任何一个的生产系统上线前,系统性能调优(Tuning)都是很重要的一步。通常,应用系统的软硬件的缺省值都是给开发平台(或小规模系统)设计的,用来跑生产系统几乎都无法发挥出软硬件的最佳性能。有时,系统调优前后的性能会差好几倍。另一方面,由于应用程序的开发人员通常都是针对功能作开发的,因此,开发硬件都是比生产环境要小的机器。例如,生产系统是一台8个CPU,64GB内存的服务器,而开发服务器可能只有1个CPU和4GB内存。所以,在开发人员中常常不具备做性能方面测试的软硬件环境。另外,有的程序员甚至在开发时都没有考虑到多用户并发的环境,程序中存在单点瓶颈等问题。在做压力测试和调优时,往往就会发现这些关键点。
由于应用系统是个软硬件的完整统一体,系统调优往往需要涉及硬件、网络、操作系统、中间件,应用程序和数据库等方面。在调优的过程中,往往需要发现存在瓶颈的地方(也就是导致系统变慢的部分),分析原因,从而改进和确定较优的参数。
我们在作JVM的调优前,通常先要了解运行的硬件平台,操作系统和中间件,然后针对这些情况配置相应的系统参数,在测试中不断完善参数。由于性能调优需要对系统非常了解,并且需要丰富的经验,因此不是一件容易的事情。这里介绍一些很好的参考资料,就是SPEC.org的网站。这是硬件厂商公布benchmark测试结果的地方,通常硬件厂商会把系统调到最优化才公布结果的,因此很有借鉴意义。常见和JVM有关的benchmark值主要有SPECjAppServer2004和SPECjbb2005。前者是J2EE应用服务器的性能指标,后者是服务器端Java虚拟机的性能指标。给大家介绍这个网站的目的是说大家可以参考硬件厂商给出的JVM配置,在根据自己应用环境的特点,较快的得出较好的参数。例如,这个网页给出了SUN公司T5120服务器+应用服务器9.1 +JDK1.5的SPECjAppServer2004值是8,439.36:
http://www.spec.org/jAppServer2004/results/res2007q4/jAppServer2004-20071106-00092.html
我们现在要关心的不是Benchmark的值(注:实际上,Sun公司的这个值是个很不错的结果),而是留意在这种环境下JVM的参数配置,可以找到一个栏目“Notes / Tuning Information”:
(转载请注明出处:
Java,JavaFX技术交流 http://javafxguy.iteye.com http://www.v-soul.com http://www.800citizen.org)
JVM Options: -server -XX:+AggressiveHeap
-Xmx2560m -Xms2560m -Xmn1024m -Xss128k
-XX:PermSize=256m
-XX:+DisableExplicitGC
-XX:ParallelGCThreads=24
-XX:LargePageSizeInBytes=256m
-XX:+UseParallelOldGC
-XX:+AggressiveOpts
-DAllowManagedFieldsInDefaultFetchGroup=true
-DAllowMediatedWriteInDefaultFetchGroup=true
-XX:-UseBiasedLocking
-Dcom.sun.ejb.containers.readonly.relative.refresh.mode=true
-Dcom.sun.jts.dblogging.insertquery=insert into
txn_log_table_0 values ( ? , ? , ? )
-Dcom.sun.jts.dblogging.deletequery=delete from
txn_log_table_0 where localtid = ? and servername = ?
-Dcom.sun.jdo.spi.persistence.support.sqlstore.
MULTILEVEL_PREFETCH=true
那么上面那些参数是什么意思呢?上述段落中“-XX”的参数是SUN JVM的扩展选项,其中以下的这些都是和垃圾回收(GC)有关:
-XX:PermSize=256m
-XX:+DisableExplicitGC
-XX:ParallelGCThreads=24
-XX:+UseParallelOldGC
-XX:+AggressiveHeap
下面这个选项是选择大的内存页面: -XX:LargePageSizeInBytes=256m
"-XX:+AggressiveOpts"是一些试验性优化参数,“-XX:-UseBiasedLocking”是非竞争性的同步选项。
而选项“-Xmx2560m -Xms2560m -Xmn1024m -Xss128k”则是初始堆栈的内存值,注意-Xmx和-Xms的值是一样的,这样系统性能会较平稳些。
至于这些参数详细代表什么意义,大家可以google一下就很容易了解。这是Sun网站上的说明,有兴趣的可以读一下:
http://java.sun.com/performance/reference/whitepapers/tuning.html
如果你的应用系统是JDK1.5,硬件是T5120,操作系统是Solaris,那么这些参数就很有借鉴意义。如果你的硬件系统不是T5120,但是使用SUN的JDK1.5 ,这些参数也是有一定参考作用。当然,最理想的是选择一个和自己的环境最近似的结果来参考。大多数软硬件的测试结果都可以在SPEC.org上找到,如果你的系统是J2EE的3层架构,可以用jAppServer2004指标,如果是纯JAVA的应用,可用jbb2005的结果:
http://www.spec.org/jAppServer2004/
http://www.spec.org/jbb2005/
需要注意的是,这些调优参数只是提供了一个思路,具体是否合适你的应用还要看实测结果。
(转载请注明出处:
Java,JavaFX技术交流 http://javafxguy.iteye.com)
Online Canadian Citizenship Test http://www.v-soul.com
U.S. Citizenship Application http://www.800citizen.org
分享到:
相关推荐
虚拟机调优是一个复杂而细致的过程,需要结合具体应用的负载情况和硬件资源进行。了解JVM的内部原理和参数含义,是优化性能的基础。通过持续监控、测试和调整,开发者可以找到最佳的JVM配置,从而实现性能的最大化...
在Java开发领域,Java虚拟机(JVM)的性能调优是提升应用程序效率的关键环节。《Java虚拟机性能参数调优指导书》由姚建华编著,为开发者提供了深入理解和优化JVM的宝贵资源。本书详细阐述了JVM的运行机制、参数分类...
本文未列出具体参考文献,但在实际操作中,建议参考Oracle官方文档、《深入理解Java虚拟机》等专业书籍,以及各类技术论坛和博客上的实践经验分享,以获取最前沿、最全面的JVM性能调优知识。 综上所述,JAVA虚拟机...
总之,《Java虚拟机规范(Java SE 7版)》是Java开发者的重要参考资料,它帮助我们理解JVM如何工作,如何与Java语言的其他部分交互,以及如何利用这些知识来提升应用的效率和可靠性。通过学习这份规范,开发者能够更...
《Java虚拟机规范(JavaSE7版)》为想要了解Java虚拟机原理的程序员提供了必须的参考资料。它不仅仅是一份文档,更是为了确保不同厂商实现的Java虚拟机能够在统一的外部接口上进行交互和通信的契约。虽然规范中的...
总之,《深入Java虚拟机》是一本深度和技术性并重的书籍,对于任何希望提升Java编程技能的开发者来说,都是一本不可或缺的参考书。通过深入学习,开发者不仅可以理解Java程序的运行机制,还能更好地优化代码,提高...
这两本书,《深入Java虚拟机》和《Java虚拟机第二版》,是深入理解JVM内部工作原理的重要参考资料。 《深入Java虚拟机》通常包含了JVM的详细剖析,涵盖了诸如类加载机制、字节码执行、内存管理、垃圾收集、性能优化...
《深入JAVA虚拟机第二版》是由Bill Venners撰写,并由曹晓钢和蒋靖翻译的中文书籍。这本书是Java开发者必备的经典读物,它详细地解析了Java虚拟机(JVM)的工作原理,帮助读者深入理解Java程序的运行机制。尽管描述...
对于性能调优和分析,建议参考其他专门讨论性能调优的书籍,例如《Java Performance》和《Oracle JRockit: The Definitive Guide》等。 本书的翻译工作是由三位中国译者周志明、吴璞渊和冶秀刚完成的。他们在翻译...
《实战Java虚拟机》这本书是Java开发者深入理解JVM(Java Virtual Machine)的重要参考资料。Java虚拟机是Java语言的核心组成部分,它负责解析和执行Java代码,实现跨平台的“一次编写,到处运行”。通过深入学习JVM...
综上所述,《Java虚拟机规范(Java SE 7版)》不仅是Java开发者深入了解Java虚拟机内部机制的重要参考资料,也是提高Java程序质量和性能的关键指南。通过对这部规范的学习,开发者不仅可以掌握Java虚拟机的基本概念...
《Java虚拟机规范(Java SE 7版)》是Java开发者深入理解JVM内部机制的重要参考资料。该规范定义了Java虚拟机的行为,确保所有Java实现的兼容性。以下是其中一些关键知识点的详细说明: 1. **Java虚拟机的架构**:...
《Java虚拟机规范中文版》是对Java虚拟机全面深入解析的重要参考资料,对于理解和优化Java应用程序有着至关重要的作用。 在Java虚拟机规范中,主要涵盖以下几个核心知识点: 1. **内存管理**:JVM内存分为堆内存、...
《Java虚拟机规范(JavaSE7版)》的发布,标志着对Java虚拟机内部机制的详细描述,为编程人员深入理解Java虚拟机提供了重要的参考。 JVM规范不仅是虚拟机实现的指导文档,而且是一个契约文档,确保不同实现者开发的...