最近发现服务一个共用服务接口的CPU占用比较高,以下是排查记录
1 查寻当前CPU占用高的PID
ps Hh -eo pid,tid,pcpu | sort -nk3 |tail
17259 17443 1.4
17259 19460 1.5
17259 23916 1.5
17259 17457 1.6
17259 18260 1.6
17259 22789 1.7
17259 17472 1.8
17259 17349 2.0
17259 17356 2.0
17259 17455 2.0
2 查找出当前PID使用的线程排名靠前的
ps -mp 17259 -o THREAD,tid,time

3找出线程的转换为16进制:

3找出线程的转换为16进制:
printf "%x\n" 15231
3b7f
4 查找代码

3b7f
4 查找代码
jstack 15016 |grep 3b7f -A 10

不过,确实没有什么信息。感觉是程序SOCKT这一块,经过查看代码,主要是解压缩ZLIB这一块的处理性能比较差。
已经确定是JAVA自带的ZLIB性能问题。换作JZLIB来替换,压测了二天,已经很稳定了。
本文记录了一次排查服务接口CPU占用过高的过程,通过定位到具体线程并分析代码,最终发现是由于JAVA自带ZLIB库性能不佳导致,并通过替换为JZLIB成功解决了问题。
3万+





