`

JVM理论与实践【JVM参数调优】

    博客分类:
  • Java
阅读更多

         在生产环境下对Java虚拟机JVM进行参数调优是必不可少的。作为普通的开发人员,如果对JVM的参数优化有一定的了解,即使是从知识体系的完整性来考虑也是大有裨益的。尴尬另外,了解JVM的运行原理也有助于编写性能良好的程序,而不是让代码成为服务器CPU和内存的杀手。

 

【Windows平台的参数调优】

       通常我们都在Windows系统下面进行软件开发工作,因此在Windows平台下面的JVM参数调优也是有必要了解的。有时候开发大规模的商业系统,即使是在开发环境也不得不进行JVM参数调优,否则系统根本跑不起来。选用MyEclipse作为开发工具,集成Tomcat作为web容器,选择“Window -> Preferences”菜单:依次选择左侧的导航菜单“MyEclipse -> Servers -> Tomcat -> Tomcat 6.x -> JDK”,微笑或者直接在文本框中输入“tomcat”进行筛选:如下图所示 


        在VM Arguments文本框中输入需要设置的JVM参数,然后在MyEclipse中启动Tomcat服务器。 

-Xms512m
-Xmx512m
-XX:PermSize=256m
-XX:MaxPermSize=256m

      为了验证Tomcat是否成功启动,打开命令行输入命令: 

jps

       命令提示符回显如下内容,其中Bootstrap即为Tomcat服务器进程,前面对应的8184即为Tomcat进程的进程号PID:天真 

6540 Jps
1176
8184 Bootstrap

      然后这个时候我们仍然不知道设置的VM Arguments是否真的在Tomcat启动时成功加载,为此输入命令 

jps -v

     提示符回显如下内容,可以看到我们设置的VM Arguments参数确实是生效了的。


 

【Linux平台的参数调优】

        通常情况下,生产环境的Tomcat服务器都部署在Linux系统下面,因此简要介绍Linux系统下面的有关设置,进入Tomcat的\bin目录: 

cd /usr/local/tomcat/bin

       打开需要编辑的shell文件:惊讶 

vi catalina.sh

      找到“# ----- Execute The Requested Command -----”行,在下面添加如下内容:大笑 

JAVA_OPTS="$JAVA_OPTS -server -Xms256m -Xmx256m -XX:PermSize=64m -XX:MaxPermSize=64m"

     然后保存退出即可,重启Tomcat服务器之后,可通过进程查看命令查看Tomcat启动时所使用的VM Arguments参数:微笑 

ps -ef | grep tomcat

    可以看到Tomcat启动时所使用的VM Arguments参数:


 
 【JVM优化参数说明】

       在生产环境下可以设置的JVM参数远不止上面提到的这些。下面简要介绍一些常见的VM Arguments参数,理解并正确使用这些参数需要对JVM原理、堆内存结构、垃圾回收原理有比较深刻的认识,这里抛砖引玉了啦。大笑 

-server

      默认情况下JVM运行在client模式,通过设置该参数JVM将运行在server模式。 

-Xms512m -Xmx512m

     设置Java堆内存的最大、最小值,通常设为一致以避免进行垃圾回收之后重新调整堆的大小。 

-XX:PermSize=256m -XX:MaxPermSize=256m

    设置方法区的最大、最小值,如果使用Spring、Hibernate等框架技术,在运行时会生成大量 的动态代理类,有可能导致永久代内存溢出。 

-Xss1m

     设置线程栈的大小,可以结合实际情况设置的小一点,以运行创建更多的线程数目。 

-XX:NewRatio=3

     设置Java堆内存新生代、老年代的比例为1:3 

-XX:SurvivorRatio=8

     新生代内存分配比例为Eden:From Survivor:To Survivor=8:1:1 

-XX:+UseParNewGC

    新生代使用并行的ParNew收集器。 

-XX:ParallelGCThreads=2

    并行收集的GC线程数目为2、和CPU内核数目一致。 

-XX:+UseConcMarkSweepGC

    老年代使用CMS收集器。 

-XX:CMSInitiatingOccupancyFraction=70

    老年代在堆内存使用率为70%开始进行Full GC

-XX:+CMSParallelRemarkEnabled

    老年代通过并行标记减少因为标记而导致的停顿时间

-XX:+UseCMSCompactAtFullCollection

    在进行Full GC时启用内存碎片整理

-XX:CMSFullGCsBeforeCompaction=2

    在整理内存碎片之前进行的Full GC的次数为2

-XX:+CMSClassUnloadingEnabled

   方法区允许进行类的卸载,防止方法区内存溢出

-XX:+CMSPermGenSweepingEnabled

   方法区的垃圾回收同时添加该参数,仅JDK1.6之前需要

-XX:SoftRefLRUPolicyMSPerMB=0

    设置软引用对象的回收策略,在堆内存紧张时立即回收所有的软引用对象

-XX:MaxTenuringThreshold=5

    新生代中的对象如果Age为5将被移动到老年代

-XX:PretenureSizeThreshold=3145728

    大于3MB(3145728 byte)的对象直接存放在老年代

-XX:+DisableExplicitGC

   禁用Syste.gc()代码进行Full GC,注意:有潜在的直接内存溢出可能惊讶 

 

====================================

限于篇幅,无法对每个参数进行一一详解,理解每个VM Arguments参数的设置都需要对JVM原理的相关知识烂熟于心,犹豫并且还有更多的参数需要应用在生产环境,诸君努力!吐舌头

 

3
5
分享到:
评论
3 楼 time1118 2016-05-22  
2 楼 Hello_Nick_Xu 2014-09-22  
sunliao_first 写道
楼主幸苦了


苦逼呀
1 楼 sunliao_first 2014-09-22  
楼主幸苦了

相关推荐

    JVM系列之性能调优参考手册(实践篇).pdf

    性能调优不仅需要了解JVM参数,还需要关注参数的具体含义和应用。例如,“-Xms”和“-Xmx”分别用于设置JVM的初始堆内存和最大堆内存,“-Xss”用于设置线程堆栈大小,“-Xmn”用于设置年轻代内存大小。而“-XX”...

    jvm调优实战经验

    【JVM调优实战经验】 在Java开发中,JVM(Java Virtual Machine)的调优是提高应用程序性能的关键环节。JVM调优涉及到对内存管理...实践中应结合理论知识与实践经验,不断测试、监控、分析,确保应用的高效稳定运行。

    jvm调优的实际应用

    《JVM调优实战解析》 ...通过理论学习和实践经验的积累,我们可以更好地理解和优化JVM,从而提高应用的性能和稳定性。在日常工作中,结合监控工具,深入源码,持续学习,是成为一名优秀的Java性能优化专家的必经之路。

    深入虚拟机---JVM调优总结(摘自网上网上大牛分享).pdf

    在深入讨论JVM(Java虚拟机)调优之前,我们有必要先了解一下虚拟机的基本概念和堆栈...通过上述的分析和总结,我们可以得出,JVM调优是一个涉及多方面知识的复杂过程,需要开发者具备扎实的理论基础和丰富的实践经验。

    JVM调优实战.doc

    然后,通过对JVM参数的调整,比如改变堆大小、设置垃圾回收器类型、优化新生代和老年代的比例等,来提升系统的性能。 总结来说,JVM调优是提高Java应用性能的关键环节,涉及到对内存分配、垃圾回收策略、对象生命...

    JVM调优视频理论及工具

    【JVM调优视频理论及工具】主要涵盖了Java虚拟机(JVM)的优化实践与相关的分析工具。在Java开发中,JVM调优是提升应用程序性能的关键环节,尤其是在高并发、大数据处理等场景下,良好的JVM配置能显著提高系统效率。...

    JVM的调优机制 初始入门

    入门JVM调优不需要高深的基础,但需要理解一些核心概念,如垃圾回收算法、内存管理、JVM参数等。 2. Java虚拟机中的数据类型 Java虚拟机中的数据类型分为基本类型和引用类型。基本类型代表原始值,如整数和浮点数,...

    jvm和gc详解及调优

    5. **GC调优**:包括如何分析GC日志,理解GC停顿(Stop-the-World)事件,以及如何通过调整JVM参数来改善系统性能,如设置堆大小、新生代与老年代的比例、存活代的晋升策略等。 6. **性能监控与诊断工具**:如...

    JVM参数调优及Java测试代码

    本主题将深入探讨JVM参数调优的重要性、原理以及如何进行测试和监控,以便找到最优配置。我们将不涉及具体代码,而是关注理论知识和实践策略。 首先,理解JVM的主要组成部分至关重要。JVM分为堆内存(Heap)、方法...

    Java-JVM调优总结

    ### Java-JVM调优总结 #### 一、引言 在现代软件开发中,Java 作为一种广泛使用的编程语言,其应用程序的性能优化至关重要。...希望本文能够帮助开发者更好地理解和掌握 JVM 调优的关键技术和实践方法。

    第四讲-JVM调优原理深度剖析、服务线上优化实践.pdf

    在64位操作系统上,JVM理论上可以分配无限的内存,但在实际应用中,需要根据压力测试和线上运行情况合理分配内存。 垃圾在JVM中指的是没有被任何引用的对象,JVM通过两种主要算法来识别垃圾: 1. 引用计数算法:...

    jvm调优.zip & hotspot源码解读

    通过调整JVM参数,如-Xms、-Xmx设置堆大小,-XX:NewRatio调整新生代和老年代比例,可以实现性能优化。 6. 字节码文件结构深度剖析: .class文件包含类的元数据和字节码指令,理解字节码的构成和执行逻辑对于理解...

    jvm调优

    总的来说,JVM调优是一项涉及广泛的知识体系,需要结合理论、源码和实践,通过合理配置参数,利用各种工具进行监控和诊断,才能达到优化效果。这不仅需要对JVM的内部机制有深入理解,也需要对应用的运行特性有清晰的...

    JVM内存管理、调优与监控考据

    此外,JVM参数调优是一个复杂的过程,涉及到许多因素,如应用的特性、工作负载模式、硬件配置等。例如,为了减少Full GC的频率,可能需要调整新生代和老年代的比例,或者选择适当的GC策略。在进行调优时,应结合理论...

    学习juc、nio、netty、tomcat调优、jvm调优-Advanced-JAVA.zip

    学习这些内容需要理论与实践相结合,理解底层原理,熟悉相关API,并通过实际项目去应用和验证。在这个过程中,你将能够构建出更高效、更稳定的Java应用程序。通过`Advanced-JAVA-master`这个项目,你可以找到示例...

    内容主要涉及分布式、并发、jvm调优相关-Poet.zip

    例如,可能有一个模块展示了如何使用Zookeeper创建分布式锁,或者有一个配置文件展示了如何调整JVM参数以适应高并发环境。通过分析这些示例,我们可以更直观地了解分布式、并发和JVM调优的实际应用。 总结来说,...

    JVM高级特性与最佳实践(第2版)+pdf+源码

    通过调整JVM参数(如-Xms, -Xmx, -XX:NewRatio等),可以优化内存分配、GC行为和线程设置,达到性能最佳。 6. **编译优化**:JVM有即时编译(JIT,Just-In-Time)机制,将热点代码编译为本地机器码,提高执行效率。...

    JVM调优总结(4)分代垃圾回收Java开发Java经验技

    在Java开发过程中,JVM(Java虚拟机)的性能优化是一项至...开发者需要根据应用特性选择合适的垃圾回收策略,并通过调整JVM参数来优化内存分配和垃圾回收效率,同时利用各种监控工具进行实时诊断,以确保应用稳定运行。

    理论与实践结合 解密JVM-day02.rar

    在深入探讨JVM(Java虚拟机)的理论与实践结合时,...通过"理论与实践结合 解密JVM-day02"的学习,我们将不仅了解JVM的基本概念,还能掌握其在实际应用中的调优技巧,为开发高性能、低内存消耗的Java应用打下坚实基础。

Global site tag (gtag.js) - Google Analytics