最近现网的java服务启动一段时间之后,就不响应请求了,进程一直还在,但是telnet端口不通。
top 命令查看服务器情况
top
看到该服务进程(80112)占用了最大的CPU
查看进程的所有线程的运行情况
top -Hp 80112
具体信息如下:
可以看到其中线程81052占用了99.9% 的CPU,而且时间运行最长,说明该线程一直在运行未释放资源
jstack 查看线程的堆栈信息
将线程ID转换成16进制 得到 13c9c
printf '%xn' 81052
打印jstack堆栈信息
这就定位到当前的业务代码啦~