30公分浅谈JVM之性能分析调优

JVM性能分析调优

某系统应用迟缓卡顿原因分析

• 接到某系统用起来比较“卡”,测试人员不能立即重现,偶然现象。

• 从网络到OS,再到系统的各个组成部分(Web服务器,应用服务器,数据库服务器,缓存服务器等)都有可能出现 问题,除非很确定的现象,一般会从应用系统本身开始开始分析排查。

• 检查代码是系统分析后面的步骤,应该先用科学化的方法步骤先检查和定位问题。

• 根据我们学习的JVM知识背景,该现象有点像系统发生FULL GC,猜测需要验证确认。

• 利用JDK自带命令行jstat检查GC情况如下:

30公分浅谈JVM之性能分析调优

MAT分析Heap Dump

• 利用jmap或者其它工具产 生Heap dump文件,使用 Eclipse Memory Analyzer工 具打开。

• Dump文件越大,加载的时 间越长,并且需要设置 MAT的内存 (MemoryAnalyzer.ini /eclipse.ini)

• 在各种视图面板中查看系 统内存使用情况

30公分浅谈JVM之性能分析调优

应用内存占用分类

30公分浅谈JVM之性能分析调优

• 可以反向追查内存泄漏的相关代码

• 老年代和持久代占用的空间太大,动态框架带来的占用,本地缓存的占用,应用本身过于庞大等;

• 导入导出等内存空间的大量占用等;

某压力测试资源占用率低分析

• 某系统无法达到预期TPS,压测值低且nmon查看OS各项资源使用偏低

• 压测进行指标上不去时,又没有其它思路时,可以找运维拿相关系统的javacore文件看看线程快照

• 使用IBM Thread and Monitor Dump Analyzer for Java工具打开文件进行检查分析

30公分浅谈JVM之性能分析调优

资源池参数限制问题

• 粗看线程堆栈没什么问题,nmon检测服务器CPU,IO,MEMORY使用正常,占比比较低

• 推测是某种资源池限制,导致并发度不高

• 仔细看工具视图,发现总线程数只有125个,不太正常,50的并发线程数都不值这个数据

• 使用过Jboss的都知道有maxThreads,acceptCount等性能参数

• 目前以用的Wildfly为例,检查相关配置,查阅资料,发现jboss:domain:io的最大工作线程数配置项task-maxthreads会影响。默认是10,而且一般使用默认安装调整…应设置成合理的值或者置空。

30公分浅谈JVM之性能分析调优30公分浅谈JVM之性能分析调优

大促某系统宕机分析

• 2015年双11大促期间晚上8点多,集中监控中心传来某系统宕机的消息

• 一般应用服务器在挂掉时候都会生成当时的线程,内存快照

• 找运维拿到javacore文件和gc日志

• 使用IBM Thread and Monitor Dump Analyzer for Java打开javacore文件分析线程堆栈

• 使用IBM Pattern Modeling and Analysis Tool for Java打开verbosegc.log

30公分浅谈JVM之性能分析调优

30公分浅谈JVM之性能分析调优

内存使用不正常

30公分浅谈JVM之性能分析调优

GC信息分析

30公分浅谈JVM之性能分析调优

内存占用浅析

30公分浅谈JVM之性能分析调优

线程堆栈概要分析

30公分浅谈JVM之性能分析调优

30公分浅谈JVM之性能分析调优

30公分浅谈JVM之性能分析调优

进一步分析

30公分浅谈JVM之性能分析调优