- 使用ps命令查看java进程详细信息:
- ps aux | grep java
- 使用top命令查看系统进程占用情况
- top
- 使用jstack命令导出Java进程的堆栈信息
- jstack pid | grep tid -A 10 "java.lang.Thread.State" > gc.log
- 找出占用cpu最高的线程id:
- top -Hp -d 1 -n 1
- ps -mp -o THREAD,tid,time
- 把占CPU最高线程id转换成16进制:
- printf "%x\n" tid
- 在stacktrace.log中寻找对应线程16进制值的线程代码
- jstack pid |grep 16进制值 -A 30
使用排查命令可以找到占用CPU过高的线程,根据线程堆栈信息可以分析线程的运行情况,找到占用CPU过高的原因。常见的原因包括死循环、线程阻塞、资源竞争等。针对不同的原因,可以采取不同的解决方案,如修改代码、调整线程池配置、优化数据库查询等。