5-JVM调优工具及实战
2021-04-24 18:38:21 0 举报
AI智能生成
JVM调优工具及实战
作者其他创作
大纲/内容
JDK自带工具
1、jps:列出所有当前的java进程
2、jmap:此命令可以用来查看内存信息,实例个数以及占用内存大小
3、dump文件
-XX:+HeapDumpOnOutOfMemoryError:内存溢出生成dump文件;
-XX:HeapDumpPath=./ (路径)
-XX:HeapDumpPath=./ (路径)
- jvisualvm命令工具导入该dump文件分析
4、jstack
jstack 进程id :检验死锁
查询cpu过高的线程:
①:top -p 19663(java进程id):查看该进程信息
②:按H:获取每个线程内存的情况
③:找到内存和cpu占用最高的线程tid,比如19664
④:转为十六进制得到 0x4cd0,此为线程id的十六进制表示
⑤:执行 jstack 19663|grep -A 10 4cd0,得到线程堆栈信息中 4cd0 这个线程所在行的后面10行,从堆栈中可以发现导致cpu飙高的调 用方法
⑥:查看对应的堆栈信息找出可能存在问题的代码
5、jstate(垃圾调优)
- jstate -gc 13988(进程id) 2000(2秒输出一次) 1000(输出100次)
arthas
GC日志
1、添加日志
- 并行、串行收集器
1 ‐Xloggc:./gc‐%t.log ‐XX:+PrintGCDetails ‐XX:+PrintGCDateStamps ‐XX:+PrintGCTimeStamps ‐XX:+PrintGCCause
2 ‐XX:+UseGCLogFileRotation ‐XX:NumberOfGCLogFiles=10 ‐XX:GCLogFileSize=100M
2 ‐XX:+UseGCLogFileRotation ‐XX:NumberOfGCLogFiles=10 ‐XX:GCLogFileSize=100M
- CMS收集器
1 ‐Xloggc:d:/gc‐cms‐%t.log ‐Xms50M ‐Xmx50M ‐XX:MetaspaceSize=256M ‐XX:MaxMetaspaceSize=256M ‐XX:+PrintGCDetails ‐XX:+P rintGCDateStamps
2 ‐XX:+PrintGCTimeStamps ‐XX:+PrintGCCause ‐XX:+UseGCLogFileRotation ‐XX:NumberOfGCLogFiles=10 ‐XX:GCLogFileSize=100M
3 ‐XX:+UseParNewGC ‐XX:+UseConcMarkSweepGC
2 ‐XX:+PrintGCTimeStamps ‐XX:+PrintGCCause ‐XX:+UseGCLogFileRotation ‐XX:NumberOfGCLogFiles=10 ‐XX:GCLogFileSize=100M
3 ‐XX:+UseParNewGC ‐XX:+UseConcMarkSweepGC
- G1收集器
1 ‐Xloggc:d:/gc‐g1‐%t.log ‐Xms50M ‐Xmx50M ‐XX:MetaspaceSize=256M ‐XX:MaxMetaspaceSize=256M ‐XX:+PrintGCDetails ‐XX:+Pr intGCDateStamps
2 ‐XX:+PrintGCTimeStamps ‐XX:+PrintGCCause ‐XX:+UseGCLogFileRotation ‐XX:NumberOfGCLogFiles=10 ‐XX:GCLogFileSize=100M ‐XX:+UseG1GC
2 ‐XX:+PrintGCTimeStamps ‐XX:+PrintGCCause ‐XX:+UseGCLogFileRotation ‐XX:NumberOfGCLogFiles=10 ‐XX:GCLogFileSize=100M ‐XX:+UseG1GC
2、解析日志
- https://gceasy.io
- 有推荐的jvm调优建议
GC优化实例
集采结算系统
1、默认使用Parallel收集器(cpu使用率优先)
2、提升整个堆的大小(评估大对象的大小,扩大年轻代)
集采爆款系统
1、使用ParaNew+CMS 收集器(客户体验优先)
2、优化思路:简单来说就是尽量让每次Young GC后的存活对象小于Survivor区域的50%,都留存在年轻代里。尽量别让对象进入老年 代。尽量减少Full GC的频率,避免频繁Full GC对JVM性能的影响。
3、运行情况评估
- 年轻代对象增长的速率
- Young GC的触发频率和每次耗时
- 每次Young GC后有多少对象存活和进入老年代
- Full GC的触发频率和每次耗时
4、实例
5、问题
由于动态对象年龄判断原则导致频繁full gc
6、优化后实例
0 条评论
下一页