环境及问题
linux系统、java程序,线上系统突然CPU升高并且长时间不下降
排查步骤
1.通过top命令查看当前cpu占用最高的java程序进程号;
2.通过top -H -p <进程号>,查看当前进程中哪些线程占用的CPU较高(-H为显示线程信息),如下图发现有两个CPU长时间为R状态(表示运行)并且占用CPU较高(此时top显示的PID为线程号),怀疑出现了线程死锁和死循环;

3.使用pstack <进程号>或者jstack <进程号>命令dump当前进程所有线程的运行堆栈,可以通过 > 文件名 将堆栈信息输出到文件;
4.将前面第2步查看到有问题的线程号(10进制)转换为16进制,然后搜索dump出来的线程堆栈,在堆栈中可以看到调用链,因此可以看到存在问题的类;

引申工具—终端录制工具
线上的系统如果是通过跳板机等工具登录的,如何将dump下来的线程堆栈文件下载到本地?此时可以使用linux/Mac自带的script工具记录终端内容(script即可以记录终端操作的情况,还能进行录制和回放,例如用于监控每个登录用户在服务器上的操作情况)。
1.通过script <输出文件名>开始记录,如果要记录线上的线程dump文件只需要登录线上的服务器,然后cat <文件名>即可;

2. 记录完成后通过exit命令或Ctrl+d退出屏幕录制;

3. 之后可以在输出文件中查看所有的操作记录。
相关文章



文章转载自金融科技小站,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




