JVM | 性能调优
一、性能调优工具
1. jps
jps
: 用来查看java进程pid的命令- 用法:
jps [-q] [-mlvV] [<hostid>]
-q
: 只显示pid-m
: 输出main method的参数-l
: 显示类的全限定名-v
: 显示虚拟机启动参数-V
: 显示通过配置文件设定的jvm参数(.hotspotrc文件或-XX:Flags=所指定的文件)hostid
: 主机地址eg: jps localhost
- 示例:
jps -mlv localhost
列出localhost上运行的jvm,展示程序输入参数,类的全限定名,虚拟机启动参数
2. jstack(查看线程)
- jstack :用于显示指定进程内线程的信息
- 用法:
jstack [option] pid
- option:
-F
: 强制线程dump,在线程挂起的时候用-m
: 同时输出java和native-l
: long listing
- option:
- jstack日志分析
3. jmap(查看内存)
4. jstat(性能分析)
jstat
: 查看堆内存各部分的使用量,以及加载类的数量- 用法:
jstat <option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
5. jconsole
6. jvisualvm
7. Arthas
二、参数配置
1. 生产环境打印GC停顿时间
-XX:+printGCApplicationStoppedTime
如果停顿时间过长,需要考虑代码是不是有大的循环, 无法进入安全点导致GC停顿时间过长问题
Total time for which application threads were stopped: 0.0000306 seconds, Stopping threads took: 0.0000070 seconds
2. 生产环境禁止RMI(remote method invoke)调用System.gc();
-XX:+DisableExplictGC
: 失效直接调用的gc
3. 生产环境真实配置案例
-Dresin.home=$SERVER_ROOT
-server
-Xmx3000M
-Xms3000M
-Xmn600M
-XX:PermSize=500M
-XX:MaxPermSize=500M
-Xss256K
-XX:+DisableExplicitGC
-XX:SurvivorRatio=1
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=0
-XX:+CMSClassUnloadingEnabled
-XX:LargePageSizeInBytes=128M
-XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70
-XX:SoftRefLRUPolicyMSPerMB=0
-XX:+PrintClassHistogram
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC
-Xloggc:log/gc.log