top使用方法:
【联想笔记本电脑cpu占用过高怎么办 电脑cpu占用过高怎么办】 使用格式: top [-] [d] [p] [q] [c] [C] [S] [s] [n]参数说明: d:指定每两次屏幕信息刷新之间的时间间隔 。当然用户可以使用s交互命令来改变之 。p:通过指定监控进程ID来仅仅监控某个进程的状态 。q:该选项将使top没有任何延迟的进行刷新 。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行 。S:指定累计模式 。s:使top命令在安全模式中运行 。这将去除交互命令所带来的潜在危险 。i:使top不显示任何闲置或者僵死进程 。c:显示整个命令行而不只是显示命令名 。
此时发现如果是Java的进程占用过高,并且一直下不来,则排查是什么线程导致占比过高 。以图中进程举例,假如发现PID为31357的Java进程占CPU比一直很高,则记录下它的PID
2.查看Java进程里面的线程的占用情况
top -H -p 31357 然后按shift+p按照CPU排序
说明:-H 指显示线程,-p 是指定进程
可以看到CPU占用较高的线程,记下他们的PID,假设这里31357的CPU占比一直是50%
或者是再用ps -mp pid -o THREAD,tid,time 查询进程中,那个线程的cpu占用率高 记住TID
将查找到的 线程占用最高的 tid 上图中 29108 转成16进制 — 71b4
3.通过jstack命令获取占用资源异常的线程栈,可暂时保存到一个文件中查看jstack 31357 > jstack.31357.log
以上能看到指定线程的堆栈信息 。如果想看到关于线程中的锁的附加信息 , 可以加一个-l参数
4.上面方法用于进程正常情况下的堆栈打印
用jstack -l命令没有响应,估计是CPU一直站着不能执行正常的命令,根据提示[The -F option can be used when the target process is not responding]只能放大招了 。
jstack -F “PID” > jstack.“PID”.txt
吐出的实际日志结果如下:
发现一大坨线程阻塞了,有用的结果在这里:
显然一直在跑的是19576这个线程,一直在执行EXCEL导出的相关方法 , 问题就出在这里,下面的任务就是排查这个地方的代码逻辑了 。
jstack命令格式:
jstack [ option ] pid
参数说明:
- -F jstack [-l] pid无法响应时,强制打印堆栈
- -l l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
- -m 混合模式输出(包括java和本地c/c++片段)堆栈 。
- pid: java应用程序的进程号
- 5jps命令查看java进程的pid更实用
命令格式
jps [ options ] [ hostid ]
参数说明:
- -m 输出传递给main方法的参数 , 如果是内嵌的JVM则输出为null 。
- -l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径 。
推荐阅读
- 电脑u盘如何下载歌曲 怎么在电脑上下载歌曲到u盘
- 重置电脑和恢复出厂设置一样吗 笔记本恢复出厂设置伤电脑吗
- 如何电脑运行内存 电脑怎么清除内存
- 怎么清除电脑浏览记录 怎样清除电脑浏览记录
- 科目一考试图片电脑流程 科目一怎么考的流程图电脑
- 电脑下载东西放在c盘还是D盘,电脑上下载到c盘还是d盘
- 电脑打不了字怎么办 电脑不能打汉字怎么恢复正常
- iPhonea1466笔记本哪一年的 苹果笔记本a1286是哪一年的
- local在电脑里是什么意思中文 local在电脑里是什么意思
- 如何设置电脑锁屏快捷键?