同业务内,某实例CPU异常高
问题的现象:同业务有多个k8s实例,在QPS相同的情况下,某个实例的CPU使用率是其它实例的两倍。
1 CPU性能指标
QPS、CPU使用率体现到CPU上是IPS、IPC,通常这两个指标可以指引后续的排查。
实例 | IPS | IPC |
---|---|---|
正常 | 7,823,662,928 | 1.18 |
异常 | 17,944,647,861 | 1.12 |
- 正常、异常实例的IPC相差不大,但是IPS差了1倍,和CPU使用率的差异吻合;
- QPS相同,但是IPS不同,说明实例的很多指令在做QPS无关的事情。
2 IPS 差异
可以从IPS的差异入手,参考之前的:
最简单的方法,是看TOP线程的情况。我司的代码,会根据线程的功能,命名线程。(C语言可以使用 pthread_setname_np
,Java语言也有相关API。)
top -H -p <pid>
发现如下差异:
- 异常实例有很多的rdk线程,有40多个
ps -L -p <pid> | wc -l
; - 正常实例则没有rdk线程。
业务同学根据这个差异,很快定位到是配置错误。修改之后各个实例的CPU使用率均衡了。