JVM参数调优

参数意义

  • -XX:PermSize分配非堆最小内存,默认为物理内存的1/64;
  • -XX:MaxPermSize分配最大内存,默认为物理内存的1/4。
  • -Xms分配堆最小内存,默认为物理内存的1/64;
  • -Xmx分配最大内存,默认为物理内存的1/4。
  • -Xss规定了每个线程堆栈的大小。一般情况下256K是足够了。影响了此进程中并发线程数大小。

实战案例

背景
JVM垃圾收集机制请参考
https://blog.csdn.net/define_us/article/details/78252783
操作问题导致Apache Active MQ严重堆积,即使解决了导致堆积的罪魁祸首,Apache MQ仍然堆积。线上CPU的average load非常高。推测为堆积导致了内存爆掉,从而恶性循环无法处理。CPU高是因为在频繁进行full GC。虽然说锅在于操作者和运维,但是让Apache Active MQ工作于如此脆弱的状态才是根本原因。

调查
因为没有打印GC日志,所以我们使用jstat来判断系统目前的GC情况。

[jboss5@10.6.155.205 app]$jstat -gcutil 5429 1000
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
  0.00   0.00 100.00 100.00  99.33 1337310 172323.430 1131470 2625679.848 2798003.278
  0.00   0.00 100.00 100.00  99.33 1337310 172323.430 1131470 2625679.848 2798003.278
  0.00   0.00 100.00 100.00  99.34 1337310 172323.430 1131471 2625682.845 2798006.275
  0.00   0.00 100.00 100.00  99.34 1337310 172323.430 1131471 2625682.845 2798006.275
  0.00   0.00 100.00 100.00  99.34 1337310 172323.430 1131471 2625682.845 2798006.275
  0.00   0.00  76.83 100.00  99.34 1337310 172323.430 1131471 2625685.747 2798009.177
  0.00   0.00 100.00 100.00  99.34 1337310 172323.430 1131472 2625685.747 2798009.177
  0.00   0.00 100.00 100.00  99.34 1337310 172323.430 1131472 2625685.747 2798009.177
  0.00   0.00 100.00 100.00  99.33 1337310 172323.430 1131472 2625685.747 2798009.177
  0.00 100.00 100.00 100.00  99.33 1337311 172323.430 1131472 2625688.651 2798012.081
  0.00 100.00 100.00 100.00  99.33 1337311 172323.430 1131472 2625688.651 2798012.081
  0.00 100.00 100.00 100.00  99.33 1337311 172323.430 1131472 2625688.651 2798012.081
  0.00 100.00 100.00 100.00  99.33 1337311 172325.732 1131473 2625688.651 2798014.383
  0.00 100.00 100.00 100.00  99.33 1337311 172325.732 1131473 2625688.651 2798014.383
  0.00   0.00  66.13 100.00  99.33 1337311 172325.732 1131473 2625691.530 2798017.262
  0.00   0.00 100.00 100.00  99.33 1337311 172325.732 1131474 2625691.530 2798017.262
  0.00   0.00 100.00 100.00  99.33 1337311 172325.732 1131474 2625691.530 2798017.262
  0.00   0.00 100.00 100.00  99.33 1337311 172325.732 1131474 2625691.530 2798017.262
  0.00   0.00  81.24 100.00  99.33 1337311 172325.732 1131474 2625694.495 2798020.227
  0.00   0.00 100.00 100.00  99.33 1337311 172325.732 1131475 2625694.495 2798020.227
  0.00   0.00 100.00 100.00  99.33 1337311 172325.732 1131475 2625694.495 2798020.227
  0.00   0.00 100.00 100.00  99.33 1337311 172325.732 1131475 2625694.495 2798020.227

S0、S1 代表两个Survivor区;
E 代表 Eden 区;
O(Old)代表老年代;
P(Permanent)代表永久代;
YGC(Young GC)代表Minor GC;
YGCT代表Minor GC耗时;
FGC(Full GC)代表Full GC耗时;
GCT代表Minor & Full GC共计耗时。
上述明显系统GC已经接近极限了。

jboss5    5429 24.9 19.3 2627380 1581788 ?     Sl    2017 179736:06 /opt/app/jdk1.6.0_22/bin/java -Xms1G -Xmx1G -XX:MaxPermSize=200M -Djava.util.logging.config.file=logging.properties -Dcom.sun.management.jmxremote -Djava.io.tmpdir=/opt/app/jboss-eap-5.0/activemq/newbroker2/tmp -Dactivemq.classpath=/opt/app/jboss-eap-5.0/activemq/newbroker2/conf; -Dactivemq.home=/opt/app/jboss-eap-5.0/activemq/newbroker2 -Dactivemq.base=/opt/app/jboss-eap-5.0/activemq/newbroker2 -Dactivemq.conf=/opt/app/jboss-eap-5.0/activemq/newbroker2/conf -Dactivemq.data=/opt/app/jboss-eap-5.0/activemq/newbroker2/data -jar /opt/app/jboss-eap-5.0/activemq/newbroker2/bin/run.jar start

明显空间已经非常恐怖了。
检查系统总共的空间,一共才8G内存。。。哭。。。前人挖坑后人踩啊。

[umelog@vm-vmw209-jbs app]$ free -m
             total       used       free     shared    buffers     cached
Mem:          7982       7886         96          0        241       1662
-/+ buffers/cache:       5982       2000
Swap:         6719         42       6677

没办法,开始想方案。

你可能感兴趣的:(java)