检查服务器资源使用情况是否正常,loadaverage、CPU使用率(尤其是单核CPU)是否有飙高现象;
检查是否出现磁盘短暂负载较高,比如iostatutil%飙高等;
确认当时网络情况是否正常,是否有网络丢包等现象。以上排查建议在有全面监控的基础上进行,偶现问题比较难定位,有全面的监控数据进行排查就方便多了。
排除Nginx层的问题,那要着重定位应用层自身代码、或者第三方调用、或者数据库等其它依赖服务是否存在响应慢的情况。首先确认是否存在以下问题:
确认应用服务是否有某些线程CPU使用率高,通过top-H可以方便实时查看
确认线程是否存在异常状态,如频繁blocked、死锁等,推荐使用visualVM、Jconsole、jstack查看线程状态,进行线程dump
如果很不幸,监控数据很少,且现有数据难以分析,那推荐两个百试不爽的分析工具,Nprofile和Btrace。
BTrace是一款利用hotSpot虚拟机可以动态替换class的特点而完成的,可以对online的程序动态的改变类的行为,进而进行线上调试的一个工具。也就是说可以不需要重启服务可以直接在线调试分析。关于Btrace的教程随意搜索就能找到很多。
Nprofile堪称利器,在性能问题分析和定位中非常有效,且比Jprofiler轻便,开销小,对性能测试结果影响小。
通常web应用会有大量的数据库操作,数据库性能对web应用的性能表现至关重要。如果应用层的分析发现大量线程等待数据库的响应,就需要对数据库层进行排查。最常见的数据库性能问题有:
数据库的配置不合理,例如最大并发连接过小,bufferpool的设置过小等引起的性能问题
数据层性能问题可以通过Mysql监控、或mysql-slow.log进一步详细分析。
THE END