性能监控
- linux命令监控
uptime
显示系统运行时间、连接数、负载情况
top
系统运行时间、平均负载情况、cpu使用率(us用户空间占比 sy内核空间占比 ni用户进程空间改变过优先级的占比 id空闲占比 wa等待输入输出占比)、内存使用情况、任务运行统计情况、空间转换情况
vmstat
统计系统cpu、io、内存、线程上下文切换指标
pidstat
查看进程详细信息,比如说cpu、io、内存等。
找出负载最高的线程以及它的线程堆栈?
先通过top命令查找当前负载最高的进程
然后通过 top -H -p pid 或 ps -p pid -L -o pcpu,tid,tname,cmd 或 pidstat -p pid -u(监控cpu) -t(监控线程) -d(监控io) -r(监控内存) 1(采集频率) 3(采集次数)
然后通过 jstack -l pid >jstack.txt 打出线程堆栈,根据第二个步骤找出的线程id转化为16进制,在文件中找到对应的nid与之对象,对应的堆栈就是负载最高线程的堆栈。
- jdk自带的工具
jps
显示java进程号
jinfo
显示jvm配置参数信息
jmap
堆信息
jmap -histo pid >1.txt
生成堆快照和对象统计信息
jmap -dump:format=b,file=heap.hprof pid
生成堆dump文件
jstack -l pid >stack.txt
生成线程堆栈信息
性能调优
打印gc信息相关参数
-verbose:gc
-XX:+printGC
-XX:+printGCDetails
-XX:+printGCTimeStamps
-Xloggc:log/gc.log
-XX:+printHeapAtGC
-XX:+HeapDumpOnOutOfMemoryError -XX:+HeapDumpPath 在OOM自动dump堆栈使用情况,保留现场
堆大小分配
-Xms -Xmx 最大堆和最小堆分配
-Xmn 新生代堆大小
-XX:NewRadio 新生代占比 官方推荐新生代占比3/8
-XX:SurvivorRadio 幸存区占比 官方推荐8,幸存区占比1/10
堆栈、线程堆栈分析
jmap -F dump:format=b,file=(pid)heap.log (pid)
jstack -l (pid) ~/(pid)jstack.txt
注意:jmap可能会造成jvm stw,暂时停顿,谨慎使用,优先选择命令配置,触发oom时自动dump
线程dump重点关注如下:
死锁,deadlock(重点关注)
执行中,Runnable(一般情况下不关注,如果长时间有可能是死循环)
等待资源,waiting on conditon(重点关注)
阻塞,blocked(重点关注)