目录
背景
从这儿开始JVM笔记的最后一部分——性能调优,包括调优工具(命令行工具、gui工具)、JVM参数、日志解析,本文则是一个开头
调优三部曲
发现问题
GC频繁、CPU负载过高、OOM、内存泄漏、死锁、响应时间太长(ANR)
排查问题
1)、打印GC日志、通过GCViewer或者http://gceasy.io来分析
2)、使用jstack、jmap、jinfo等命令行工具
3)、dump出堆文件,并分析
4)、使用Arthas、jconsole或者JVisualVM来实时查看JVM状态
5)、jstack查看堆栈信息
解决问题
1)、适当增加内存、选择回收器
2)、优化代码,控制内存使用
3)、增加机器,负载均衡
4)、合理设置线程池线程数量
5)、使用中间件提高程序效率,比如缓存、消息队列等
测试指标
响应时间
提交请求和得到返回结果之间使用的时间。在GC中,暂停时间是指执行GC时,程序的工作线程被暂停(STW)的时间
吞吐量
单位时间内完成的工作量。在GC中,吞吐量指的是运行用户代码时间占总运行时间的比例,涉及参数-XX:GCTimeRatio=n,吞吐量=1 - 1/(1 + n)
并发数
同一时刻和服务器有实际交互的请求数
内存占用
java堆所占内存的大小
相互间的关系
并发数变大,响应时间会下降,吞吐量会先升后降;JVM性能调优主要关注响应时间和吞吐量