linux下jvm 参数调优
1.基本概念。
JAVA_MEM_OPTS=" -server -Xmx2g -Xms2g -Xmn512m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCompressedOops
-server 启用能够执行优化的编译器。
-Xss 单个线程堆栈大小值。
-Xms 启动应用时,JVM堆空间的初始大小值。
-Xmx 应用运行中,JVM堆空间的极限值。
-Xmn 堆空间的新生代空间大小。
-XX:PermSize永久存储区的大小
2.VM性能诊断工具
基本工具:JPS ,JSTAT,JMAP
Jstat( “Java Virtual Machine statistics monitoring tool” )是JDK自带的一个轻量级小工具。主要对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。
语法结构如下:jstat?[Options] vmid [interval] [count]
??? Options -- 选项,我们一般使用 -gcutil 查看gc情况
??? vmid??? -- VM的进程号,即当前运行的java进程号
??? interval-- 间隔时间,单位为毫秒
??? count?? -- 打印次数,如果缺省则打印无数次
root@(none):~# jstat -gcutil 595
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 25.40 29.78 48.50 5 0.036 3 0.238 0.274
S0? -- Heap上的 Survivor space?0 区已使用空间的百分比
??? S1? -- Heap上的 Survivor space 1 区已使用空间的百分比
??? E?? --?Heap上的 Eden space 区已使用空间的百分比
??? O?? --?Heap上的 Old space 区已使用空间的百分比
??? P?? --?Perm space 区已使用空间的百分比
??? YGC -- 从应用程序启动到采样时发生 Young GC 的次数
??? YGCT-- 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
??? FGC -- 从应用程序启动到采样时发生 Full GC 的次数
??? FGCT-- 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
??? GCT?-- 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
jmap
jmap 是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。
使用方法
jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。
jmap -dump:format=b,file=f1 PID可以将该PID进程的内存heap输出出来到f1文件里。
集成工具: JConsole,jvisualvm
典型性能故障分析
2.vmstat