【性能测试】常见的性能问题分析思路(一)道与术 (2)

绝大多数的性能问题都是“系统慢”的问题。系统慢,可能慢在应用服务器端、数据库端、网络端、客户端(客户端慢通常比较容易定位),可以先从以下四个方法进行分析诊断,定位大的方向:

1. 观察服务器资源利用率

主要观察应用服务器、数据库服务器的cpu、内存使用情况,如果应用服务器cpu利用率较高,例如在50%以上,则说明应用服务器正在处理请求,有压力。如果数据库服务器cpu利用率较高,例如在50%以上,则说明数据库服务器正在处理请求,有压力,可能有较耗时的sql语句在执行。资源分析属于辅助分析,需要结合其它方法一起使用。

2. 查看日志

查看日志非常重要,日志里会提供非常有用的线索,需要养成查看日志的习惯。查看日志定位问题需要一定的经验和积累,以下是查看日志的几条经验和建议(查找日志中是否有如下关键字信息):

Outofmemory:有内存溢出,通常会生成heapdump文件,需要结合javacore进一步分析,可以借助相关工具。

can not open connection:应用服务器的数据库连接池用光,检查连接参数是否设置正确,如果参数配置没有问题,需要结合javacore进一步分析

Stack overflow:结合javacore进一步分析

Dead lock:日志中会明确指明哪段代码发生了死锁 

3.关注时间戳分析日志时关注时间戳信息,尤其关注系统变慢前后时间点的日志。关注反复出现的日志信息,关注同一时间点大量出现的日志信息出现了很多很多错误信息,对这些信息尤其需要重点关注。
4.其它显而易见的错误如网络连接错误等,可以检查当前正在处理什么请求,可以查看jvm内存的使用情况,检查线程、数据库连接、控制台检查只是辅助,需要结合其它措施,如利用全链路系统一起分析。比如:生成java线程快照,常用命令

kill -3 进程号或者jstack 进程号

Jstack –l  进程号

jstat –gcutil 进程号 关注内存堆使用情况


最后总结下系统慢的三个大方向

应用服务器端问题,首先检查jvm参数、连接参数是否设置正确,参数没有问题那就是代码问题,根据日志、javacore、heapdump的分析结果,检查、修改代码。

数据库端问题,通常都是由于低效的sql语句导致,优化sql语句即可,也可能是数据库连接池。

其它调用过程问题,例如网络连接问题(日志中会有错误信息),检查网络联通稳定性等。


通用性能分析思路

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzddyd.html