背景
服务接口无法正常返回,用lens到pod内执行top发现CPU占用过高。
分析过程
top命令
执行top命令:
发现pid为1的进程占用CPU过高。
top -Hp
通过top -Hp 1可以查看该进程下各个线程的cpu使用情况:
可以发现pid=8的线程占用CPU资源最高。
jstack 命令
top命令定位到cpu占用率较高的线程之后,使用jstack 进程pid命令查看当前java进程的堆栈状态:
jstack 1 >> jstack.txt
找出调用栈
jstack命令生成的thread dump信息包含了JVM中所有存活的线程,为了分析指定线程,必须找出对应线程的调用栈。top命令获取到的占用cpu资源较高线程pid,将该pid转成16进制的值,在thread dump中每个线程都有一个nid,找到对应的nid即可。