性能测试如何定位(思路)

背景:上一篇写了一个如何开展测试,这篇就补充下如何定位性能问题,权当是一种思路;

思路如下:(从前到后,从表象到内部)

  1. 首先排除压力机自身的问题,如CPU、内存、网络、脚本、应用环境等问题;
  2. 监控中间件的访问日志,观察响应时间,大体确定耗时处于哪一个阶段(把范围缩小);
  3. 排查网络问题,监控压力机到后端服务的网络,以及各服务间的网络,是否达到网络上线(网络问题一般不会出现,但是容易被忽略,条件允许的话,性能测试的网路独立);
  4. 监控服务端所有机器的操作系统负载,如CPU,内存,磁盘,网络是否达到瓶颈(这块主要监控应用服务器和数据库服务器操作系统级别的);
  5. 监控应用服务的日志,查看是否有ERROR,或者timeout级别的报错(主要打开部署应用,动态监控);
  6. 监控中间件的连接数,如Nginx、tomcat、MySQL 是否达到上限(目前项目中我就是查看了MySQL的连接数:show variables like '%connections%'和show status like '%thread%')
  7. 监控应用程序线程状态,使用jstack和jvisualvm查看是否有死锁、阻塞情况;(监控的方法关注后面的blog);
  8. 监控应用程序的jvm,使用jstat和jmap查看GC情况,是否有内存泄漏情况;
  9. 使用jprofiler监控应用程序,可以查看耗时时间比较长的代码(这个工具需要破解,在公司慎重使用,万一被安排上了,哈哈)
  10. 监控数据库,是否有慢查询,一般数据库cpu过高的原因都是慢查询(这个一般阿里云会提供这种服务,可以随时监控);
  11. 监控数据库执行计划,是否有全表扫描,以及索引不生效的情况;
  12. 检查系统是否有外部依赖情况,如果外部依赖性能很差,也会造成性能低下(这此压测主要的问题,就是因为外部依赖性能差的原因);
  13. 对于不好定位的问题,可以采用模块隔离的方法来确定问题
  14. ps :以上的思路都是理论,如何实践,还需要做项目时,亲自体会

猜你喜欢

转载自www.cnblogs.com/Slowfish/p/11731036.html
今日推荐