电脑cpu占低温高 (电脑cpu占低温高怎么办) 一、调查步骤1.使用top 定位到占用CPU高的进程PID 然后按shift p按照CPU排序

top命令是Linux以下常用的性能分析工具,可实时显示系统中各过程的资源占用情况,类似于Windows任务管理器

第一行,任务队列信息,相同uptime 执行命令的结果

07:27:05 运行时间:up 1:57 min, 目前登录用户: 3 user 负载均衡(uptime) load average: 0.00, 0.00, 0.00 average接下来的三个数字是1分钟、5分钟和15分钟的负载。 load average数据是每5秒检查一次活跃的过程数,然后按特定算法计算的值。假此数除以逻辑CPU当数量高于5时,表明系统超载运行

第二行,Tasks — 任务(进程)

总进程:150 total, 运行:1 running, 休眠:149 sleeping, 停止: 0 stopped, 僵尸进程: 0 zombie

第三行,cpu状态信息

0.0%us【user space】— 占用用户空间CPU的百分比。 0.3%sy【sysctl】— 占用核心空间CPU的百分比。 0.0%ni【】— 占用优先级的过程占用CPU的百分比 99.7%id【idolt】— 空闲CPU百分比 0.0%wa【wait】— IO等待占用CPU的百分比 0.0%hi【Hardware IRQ】— 硬中断占用CPU的百分比 0.0%si【Software Interrupts】— 软中断占用CPU的百分比

第四行,内存状态

1003020k total, 234464k used, 777824k free, 24084k buffers缓存内存

第五行,swap交换分区信息

2031612k total, 536k used, 2031076k free, 505864k cached【缓冲交换区总量】

可用内存=free buffer cached 内存监控,在top我们应该时刻监控第五行swap交换分区的used,如果这个值在不断变化,说明内核在不断进行内存和swap真正的内存不足以交换数据。 第四行中使用的内存总量(used)指系统内核控制的内存数, 第四行空闲内存总量(free)是内核尚未纳入其控制范围的数量。 内核管理中包含的内存不一定在使用中,但也包括过去使用过的可重复使用的内存。内核不会将这些可重复使用的内存归还给free中去,所以在linux上free内存会越来越少,但不用担心。 内核管理中包含的内存不一定在使用中,但也包括过去使用过的可重复使用的内存。内核不会将这些可重复使用的内存归还给free中去,所以在linux上free内存会越来越少,但不用担心。

更多Linux内核视频资料免费·收到后台私信【内核】自行获取。

第六行,空行

第七行以下:各过程(任务)的状态监测

PID — 进程idUSER — 进程所有者PR — 进程优先级NI — nice值。负值表示高优先级,正值表示低优先级VIRT — 过程中使用的虚拟内存总量、单位kb。VIRT=SWAP RESRES — 单位使用过程中未更换的物理内存大小kb。RES=CODE DATASHR — 共享内存大小,单位kbS —进程状态。D=睡眠状态不可中断 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程%CPU — 上次更新到现在CPU时间占百分比%MEM — 过程中使用的物理内存百分比TIME — 进程使用的CPU时间总计,单位1/100秒COMMAND — 过程名称(命令名/命令行)

详解

VIRT:virtual memory usage 虚拟内存1.过程中需要的虚拟内存大小,包括过程中使用的库、代码、数据等。如果过程申请100m但实际上只使用了10个内存m,然后它会增加100m,而不是实际使用量 RES:resident memory usage 常驻内存1。过程中使用的内存大小,但不包括swap out2.如果申请100,包括其他流程的共享3。m实际使用10的内存m,它只增长10m,与VIRT相反,4.库占用内存,它只统计加载的库文件所占内存的大小 SHR:shared memory 共享内存1。除了自己过程中的共享内存外,还包括其他过程中的共享内存2。虽然过程中只使用了几个共享库函数,但它包含了整个共享库的大小3。计算一个过程中的物理内存大小公式:RES – SHR4、swap out后,它会下降 DATA1.数据占用的内存。如果top按f键不显示。如果top如果没有显示,可以按f键显示。2.该程序所需的真实数据空间确实用于运行。 top 可通过运行 top 内部命令控制过程的显示模式。内部命令如下:s – 更改图片更新频率l – 关闭或打开第一部分第一行 top 信息的表示t – 关闭或打开第一部分第二行 Tasks 和第三行 Cpus 信息的表示m – 关闭或打开第一部分第四行 Mem 和 第五行 Swap 信息的表示N – 以 PID 顺序排列的大小表示P – 以 CPU 占用率的顺序排列进程列表M – 以内存占用率的顺序排列进程列表h – 显示帮助n – 设置在过程列表中显示的过程数量q – 退出 tops – 更改图片更新周期

top使用方法:

使用格式: top[-][d][p][q][c][C][S][s][n]参数说明: d:指定每两次刷新屏幕信息之间的时间间隔。当然,用户可以使用s交互命令来改变它。当然,用户可以使用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完整的文件路径。-l 输出应用程序主类的完整包名,或应用程序JAR完整的文件路径。-v 输出传给JVM的参数。

三个参数一起显示更详细的信息:

发现这些Java开启过程的启动参数JMX在正常情况下,远程端口可以通过jconsole过去可以看到远程连接JVM日常参数。例如,上图中的本地访问pay.war进程:

电脑