压测过程中,发现应用服务器的CPU使用率比较高(>80%),有两种情况
1、接口的性能非常好,比如响应时间<10ms,tps很高,此时CPU使用率高是正常的,不需要优化2、接口性能不好,比如响应时间>200ms,tps很低,此时需要考虑优化
CPU消耗高可能的原因
1、使用了复杂的算法,比如加密、解密
2、压缩、解压、序列化(比如tojson,fromjson)等操作
3、代码bug,比如死循环
定位方法
system CPU 还是user CPU高
从prometheus监控中查看system CPU和user CPU哪一个更高
user CPU高
1、使用 top 命令来查看 CPU 占用情况,确认是哪一个进程导致了高 CPU 使用: top
2、使用top命令配合 -H 参数,定位最占用 CPU 的线程: top -Hp PID
3、printf “%x\n” threadId 将线程号转换成16进制
4、使用jstack获取线程堆栈信息:jstack PID > thread_dump.txt,从thread_dump.txt查找第3步定位到的线程号,查看线程信息,如第3步定位到的线程号是3425
"Thread-3425" #3425 prio=5 os_prio=0 tid=0x00007f3e2a080800 nid=0x4e9f runnable [0x00007f3e278fe000]
java.lang.Thread.State: RUNNABLE
at com.example.validator.InputValidator.v