JVM的调优(六)

jvm底层的东西应该说接触到的机会很少,在项目中,我们可以进行代码调优、SQL语句调优、jvm调优......本文谈不上是经验之谈,对jvm调优进行一个小结吧!

1.JVM的调优参数

    1.1 JVM三大性能调优参数

           -Xss:规定了每个线程虚拟机(堆栈)的大小

           -Xms:堆的初始值

           -Xmx:堆能达到的最大值

    1.2 堆设置
        -Xms:初始堆大小
        -Xmx:最大堆大小
        -XX:NewSize=n:设置年轻代大小
        -XX:NewRatio=n:设置年轻代和年老代的比值。

               如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
        -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值

              注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5

       -XX:MaxPermSize=n:设置持久代大小

   1.3 收集器设置
        -XX:+UseSerialGC:设置串行收集器
        -XX:+UseParallelGC:设置并行收集器
        -XX:+UseParalledlOldGC:设置并行年老代收集器,这个是JAVA 6出现的参数选项
        -XX:+UseConcMarkSweepGC:设置并发收集器

   1.4 垃圾回收统计信息
      -XX:+PrintGC
      -XX:+PrintGCDetails
      -XX:+PrintGCTimeStamps
      -Xloggc:filename

   1.5 并行收集器设置
      -XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
      -XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
      -XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)

  1.6 并发收集器设置
     -XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
     -XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。
典型设置:

  -Xmx3550m -Xms3550m -Xmn2g -Xss128k

     -Xmx3550m:设置JVM最大可用内存为3550M。

     -Xms3550m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

     -Xmn2g:设置年轻代大小为2G。

     -Xss128k:设置每个线程的堆栈大小。

-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代

2.在调优之前,我们需要记住下面的原则:

多数的 Java 应用不需要在服务器上进行 GC 优化;

多数导致 GC 问题的 Java 应用,都不是因为我们参数设置错误,而是代码问题;

在应用上线之前,先考虑将机器的 JVM 参数设置到最优(最适合);

减少创建对象的数量;

减少使用全局变量和大对象;

GC 优化是到最后不得已才采用的手段;

在实际使用中,分析 GC 情况优化代码比优化 GC 参数要多得多。

GC 调优目的

将转移到老年代的对象数量降低到最小;

减少 GC 的执行时间。

3. JVM调优

   3.1 查看堆空间大小分配(年轻代、年老代、持久代分配)

   3.2 垃圾回收监控(长时间监控回收情况)

   3.3 线程信息监控:系统线程数量

   3.4 线程状态监控:各个线程都处在什么样的状态下

  3.5 线程详细信息:查看线程内部运行情况,死锁检查

  3.6 CPU热点:检查系统哪些方法占用了大量CPU时间

  3.7 内存热点:检查哪些对象在系统中数量最大

简单小结至此,后继会继续更新。如有不足,欢迎留言指正,望不吝赐教。。。

发布了132 篇原创文章 · 获赞 1 · 访问量 7293

猜你喜欢

转载自blog.csdn.net/duan196_118/article/details/104244395
今日推荐