所谓调优,首先确定追求什么,吞吐量优先还是响应时间优先。
- 吞吐量:用户代码时间 / (用户代码执行时间 + 垃圾回收时间)
- 响应时间:STW越短,响应时间越少
什么是调优
- 根据需求进行JVM规划和预调优
- 优化运行JVM运行环境(慢、卡顿)
- 解决JVM运行过程中出现的各种问题
如何调优
-
系统CPU经常100%
CPU100%那么一定有线程占用系统资源
1.找出哪个进程CPU占用高(top)
2.找出该进程哪个线程CPU高(top -Hp pid)
3.把线程号转16进制(printf %x tid)
4.导出该线程的堆栈信息(jstack pid)
重点关注:WAITING/BLOCKED
找到线程中waiting on <xx>的都有哪些,找到是哪个线程持有<xx>这把锁 -
系统内存占比高
1.导出堆内存(jmap)
2.分析(jhat jvisualvm mat jprofiler ...)
常用命令
- jstat -gc pid 查看进程GC信息
- jmap -histo pid| head -20 查看对象占用内存情况
- jmap -dump:format=b,file=xxx pid / jmap -histo
jmap -dump执行期间对进程产生影响很大,何时使用?
①可设定HeapDump参数,OOM时自动产生堆转储文件
②服务器高可用,停掉这台服务器对其他服务器无影响 - 使用MAT / jhat进行dump文件分析
https://www.cnblogs.com/baihuitestsoftware/articles/6406271.html
分析工具
1.visualvm(测试压测时使用)
2.arthas
3.jprefiler(收费)
网友评论