使用 jstack 导出 JAVA 进程的线程栈信息,并分析线程栈信息,看能否定位到耗费 CPU 的线程。
如果无法位,使用 jmap 导出 JAVA 进程的堆信息,检查是否存在内存泄漏。
如果仍然无法定位,使用 ps 工具查看进程状态、资源占用情况,确定系统级别的问题。
最后,根据日志、网络分析等找到具体原因。
排查过程
使用 ssh 登录到服务器上,打开终端。
输入 top 命令,进入系统监控界面。
按下方向键,将光标移动到 %CPU 列,按下 Shift + > 键,可以将进程按照 CPU 占用率的大小进行排序。
查找占用率高的进程,可通过 PID 和进程名进行识别。
使用 top -Hp pid 命令,可以查看占用 CPU 的线程情况。其中 pid 是进程 ID,可以在 top 命令中查看到。 在 top 命令中,将光标移动到对应进程上,按下 H 键,会显示该进程下的线程列表。按下 Shift + > 键,可以将线程按照 CPU 占用率的大小进行排序。可以根据线程 ID 或者线程名称来定位到具体的线程。
使用 jstack 命令,可以导出进程下的线程栈信息,从而进一步分析线程情况。具体操作如下:输入 jstack -l pid 命令,其中 pid 是进程 ID,可以在 top 命令中查看到。然后会输出该进程下所有线程的栈信息,可以通过线程 ID 进一步定位到具体线程。