联想笔记本电脑cpu占用过高怎么办 电脑cpu占用过高怎么办( 二 )

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占用过高怎么办 电脑cpu占用过高怎么办


可以看到CPU占用较高的线程,记下他们的PID,假设这里31357的CPU占比一直是50%
或者是再用ps -mp pid -o THREAD,tid,time 查询进程中,那个线程的cpu占用率高 记住TID
联想笔记本电脑cpu占用过高怎么办 电脑cpu占用过高怎么办


将查找到的 线程占用最高的 tid 上图中 29108 转成16进制 — 71b4
联想笔记本电脑cpu占用过高怎么办 电脑cpu占用过高怎么办


3.通过jstack命令获取占用资源异常的线程栈,可暂时保存到一个文件中查看jstack 31357 > jstack.31357.log
联想笔记本电脑cpu占用过高怎么办 电脑cpu占用过高怎么办


以上能看到指定线程的堆栈信息 。如果想看到关于线程中的锁的附加信息 , 可以加一个-l参数
联想笔记本电脑cpu占用过高怎么办 电脑cpu占用过高怎么办


4.上面方法用于进程正常情况下的堆栈打印
用jstack -l命令没有响应,估计是CPU一直站着不能执行正常的命令,根据提示[The -F option can be used when the target process is not responding]只能放大招了 。
jstack -F “PID” > jstack.“PID”.txt
吐出的实际日志结果如下:
联想笔记本电脑cpu占用过高怎么办 电脑cpu占用过高怎么办


发现一大坨线程阻塞了,有用的结果在这里:
联想笔记本电脑cpu占用过高怎么办 电脑cpu占用过高怎么办


显然一直在跑的是19576这个线程,一直在执行EXCEL导出的相关方法 , 问题就出在这里,下面的任务就是排查这个地方的代码逻辑了 。
jstack命令格式:
jstack [ option ] pid
参数说明:
  1. -F jstack [-l] pid无法响应时,强制打印堆栈
  2. -l l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
  3. -m 混合模式输出(包括java和本地c/c++片段)堆栈 。
  4. pid: java应用程序的进程号
  5. 5jps命令查看java进程的pid更实用

联想笔记本电脑cpu占用过高怎么办 电脑cpu占用过高怎么办


命令格式
jps [ options ] [ hostid ]
参数说明: