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