Java的WEB应用性能问题定位方法总结(一):常见的性能指标分析

其实早就想对于性能问题的定位做一个总结。正好,最近做了一些Java的WEB应用性能问题的定位的专题工作,这里简单记录一些典型的性能问题定位方法。

(比如TPS偏低、吞吐量不足等:这些指标问题由下面说的多个指标造成,故不在单独讨论的范围之内)

 

应用CPU占用偏高,可能的因素包括:

逻辑复杂、算法效率低下

过度逻辑

检查方法:

JProfiler检查热点,等到系统稳定以后采集数据

截取堆栈,检查runnable线程,尤其对定位吞吐量不足造成的CPU占用偏高问题有帮助

 

堆栈占满,可能的因素包括:

堆配置过小

缓存配置过大

内存泄露

不及时的GC

检查方法:

jmap -heap 获取堆的详细信息

jmap -histo 获取不同对象的数量

多次jmap -heap 或 jhat 比较两个状态之间的对象变化情况

GC日志,使用工具辅助分析

 

DB瓶颈,可能的因素包括:

大表查询

不合理的索引

大表关联

待补充

检查方法:

分析SQL的执行计划,比如有的SQL可以走索引的结果走了全表扫描;哪些SQL cost偏高,需要优化

待补充。

 

磁盘I/O瓶颈,可能的因素包括:

检查方法:

vmstat

iostat

网络瓶颈,可能的因素包括:

检查方法:

查看Tomcat线程堆栈的时候会发现Tomcat线程池中的N多线程处于数据读取状态

ifconfig

 

其他问题:

LoadRunner瓶颈

开发模式配置检查

你可能感兴趣的:(java,多线程,sql,tomcat,Web,loadrunner)