JVM性能调优(指标/参数/案例)
2021-03-03 10:51:52 0 举报
AI智能生成
JVM性能调优(指标/参数/案例)
作者其他创作
大纲/内容
阅读导航
类加载机制 👉
运行时数据区 👉
GC垃圾回收 👉
OOM内存溢出 👉
JVM性能调优
JVM常用工具 👉
JIT即时编译 👉
调优阶段
上线前:根据需求(支撑多少QPS)进行JVM规划和预估调优(几台机器,多大内存,堆内存划分)
上线初期:根据日志优化JVM运行环境(解决慢、卡顿问题)
上线后期:解决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:栈空间大小
扩展:为什么最小堆和最大堆设置一样大?
防止内存震荡(否则JVM会将堆内存进行扩容和缩容)
扩展和回缩需要大量的计算,影响程序的执行效率
-XX开头
通过 java -XX:+PrintFlagsFinal -version | more 命令查看
常用参数
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintHeapAtGC
调优案例
日均百万交易系统
JVM堆栈大小设置?
JVM 调优,让其几乎不发生 Full GC?
线程死锁
四个必要条件
互斥、请求和保持、不可剥夺、环路等待
预防死锁
破坏四个必要条件中任意一个都可以
指定加锁顺序、设置超时时间
银行家算法
保证系统动态分配资源后不进入不安全状态
死锁检测工具
Jstack和Jconsole
手写死锁(伪代码)
举例
哲学家用筷子吃饭,每人抢到一根
关于作者
我的博客 👉
微信公众号 👉
GitHub 主页 👉
0 条评论
下一页