性能测试过程中,我们会去监控资源的使用情况,一般监控哪些方面呢?
1、服务器的资源情况(CPU/内存/网络/线程)
2、数据库(慢查询/死锁)
3、中间件(redis/memcache/rabbitmq)
某日,在测试监控过程中发现,应用服务器的CPU非常高。
分析:应用cpu高,说明进程非常耗用资源,进程又是由线程组成的,故登录服务器排查:
步骤:1)用top命令查看占用资源高的进程,记下进程pid。
2)top -Hp pid 列出进程下面的哪些线程消耗资源,记下线程的pid,转换为16进制。
3)打出进程dump信息:命令为:jstack -l pid >111.txt
4)sz 111.txt,下载进程dump信息查看,查找dump中16进制的线程信息。
5)定位到哪里,就是哪里的线程一直在耗费资源,定位出来让研发去解决。
原因:我之前项目的原因是;使用了不安全的线程,导致占用CPU较高。
至此,完美定位并且解决了占用资源高的性能问题。