JVM性能调优(指标/参数/案例)
2021-03-03 10:51:52 0 举报
AI智能生成
JVM性能调优(指标/参数/案例)
作者其他创作
大纲/内容
阅读导航
<b><font color="#0076b3">类加载机制</font></b> 👉
<b><font color="#0076b3">运行时数据区</font></b> 👉
<b><font color="#0076b3">GC垃圾回收</font></b> 👉
<b><font color="#0076b3">OOM内存溢出</font></b> 👉
<b><font color="#f15a23">JVM性能调优</font></b>
<b><font color="#0076b3">JVM常用工具</font></b> 👉
<b><font color="#0076b3">JIT即时编译 </font></b>👉
调优阶段
<b>上线前</b>:根据需求(支撑多少QPS)进行<b>JVM规划</b>和<b>预估调优</b>(几台机器,多大内存,堆内存划分)
<b>上线初期</b>:根据日志优化JVM运行环境(解决慢、卡顿问题)
<b>上线后期</b>:解决JVM运行过程中出现的各种问题(OOM,逃逸分析,频繁 full gc)
调优指标
停顿时间
垃圾收集器做垃圾回收中断应用执行的时间
-XX:MaxGCPauseMillis:停顿时间(建议)
GC会尝试各种手段达到这个时间,比如减小年轻代
GC时间比例
GC时间占用程序运行时间的百分比:1/(1+n)
-XX:GCTimeRatio = n(默认值99)即 1% 时间用于垃圾收集
例如将 n=19 则垃圾收集时间为1/(1+19) 即 5% 时间用于垃圾收集
吞吐量
吞吐量=应用程序时间/(应用程序时间+垃圾收集时间) 即 1-1/(1+n)
调优参数
标准参数,-开头
通过 java 命令查看
常用参数
java -version
java -help
非标准参数
-X开头
通过 java -X more 查看
常用参数
-Xms200m -Xmx200m:最小堆和最大堆
-Xmn60m:新生代
-Xss1m:栈空间大小
扩展:为什么最小堆和最大堆设置一样大?
<b>防止内存震荡</b>(否则JVM会将堆内存进行扩容和缩容)
扩展和回缩需要大量的计算,影响程序的执行效率
-XX开头
通过 java -XX:+PrintFlagsFinal -version | more 命令查看
常用参数
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintHeapAtGC
调优案例
日均百万交易系统
JVM堆栈大小设置?
JVM 调优,让其几乎不发生 Full GC?
线程死锁
四个必要条件
互斥、请求和保持、不可剥夺、环路等待
预防死锁
破坏四个必要条件中任意一个都可以
指定加锁顺序、设置超时时间
银行家算法
保证系统动态分配资源后不进入不安全状态
死锁检测工具
Jstack和Jconsole
手写死锁(伪代码)
举例
哲学家用筷子吃饭,每人抢到一根
关于作者
<b style=""><font color="#b296c7">我的博客</font></b> 👉
<b><font color="#00a650">微信公众号</font></b> 👉
<b><font color="#f15a23">GitHub 主页</font></b> 👉
0 条评论
下一页