简谈JVM之性能监控和调优

性能监控

  1. 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与之对象,对应的堆栈就是负载最高线程的堆栈。

  1. 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(重点关注)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。