CPU温度过高!排除了风扇问题也没中毒

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CPU温度过高!排除了风扇问题也没中毒相关的知识,希望对你有一定的参考价值。

还会有什么原因?
处理器名称 DualCore AMD Athlon 64 X2 4400+
CPU 核心频率 2310.5 MHz (原始频率: 2300 MHz)
CPU 倍频 11.5x
CPU 外频(FSB) 200.9 MHz (原始频率: 200 MHz)
主板名称 Asus M2N-X Plus (3 PCI, 2 PCI-E x1, 1 PCI-E x16, 2 DDR2 DIMM, Audio, LAN)

灰尘什么的都清理了!我现在机箱是打开的!不玩游戏温度就在50度左右,就只玩个WAR3温度就飙上去了!半个小时后就直接自动关机!一个WAR3而已!以前双开WOW都不会

CPU温度过高有三个方面的原因:
一、散热不良
1、CPU风扇的机械性阻力太大,风速下降,将会导致CPU的热量不能及时散发出去,CPU温度上升过高、过快;
2、散热器上的灰尘太多,影响散热效能;
3、CPU自身有质量问题;
二、主机电源
1、主机电源的+12V电压太低,导致CPU散热风扇电机转速下降,风力减小,影响CPU热量的散发;
2、主机电源+5V电压降低,使得CPU的驱动功率不足,效率降低,热量相对提升,产生低效高热的恶性循环,导致CPU温度不断攀升;
三、内存
如果使用不兼容的内存配置,例如512M+1G,或者是不同生产厂家、生产批次的内存条混装,就容易出现这样的问题;
此时的CPU的无效读取次数增加,使用率达到或接近100%,温度立即上升;
以上三种现象在运行大程序或打游戏时最为突出;
出现此类现象,应该用排除法来寻找故障源,而CPU使用率过高的重要原因是第二、三项,请楼主重点排查。
参考技术A 还有环境温度啊,太高的环境温度会让电脑死机哦. 参考技术B 散热不好 涂硅脂 超频 参考技术C 运行大型游戏也会使CPU温度升高 参考技术D 1如果cpu是奔腾D温度高是非常正常滴,因为是结构的关系。
2中毒
3运行大型软件及游戏
4硅脂没涂好
第5个回答  2009-05-12 导热硅膏,灰尘。
以下CPU高温正常,具体有:
英特尔:奔腾4,奔腾D。
AMD:弈龙一代三核、四核。

记一次线上Java程序导致服务器CPU占用率过高的问题排除过程

1、故障现象
客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高。

2、CPU占用过高问题定位
2.1、定位问题进程
使用top命令查看资源占用情况,发现pid为14063的进程占用了大量的CPU资源,CPU占用率高达776.1%,内存占用率也达到了29.8%

[[email protected] ~]$ top
top - 14:51:10 up 233 days, 11:40,  7 users,  load average: 6.85, 5.62, 3.97
Tasks: 192 total,   2 running, 190 sleeping,   0 stopped,   0 zombie
%Cpu(s): 97.3 us,  0.3 sy,  0.0 ni,  2.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 16268652 total,  5114392 free,  6907028 used,  4247232 buff/cache
KiB Swap:  4063228 total,  3989708 free,    73520 used.  8751512 avail Mem 
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                               

14063 ylp       20   0 9260488 4.627g  11976 S 776.1 29.8 117:41.66 java    

2.2、定位问题线程
使用ps -mp pid -o THREAD,tid,time命令查看该进程的线程情况,发现该进程的多个线程占用率很高

[[email protected] ~]$ ps -mp 14063 -o THREAD,tid,time
USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID     TIME
ylp       361   -    - -         -      -     - 02:05:58
ylp       0.0  19    - futex_    -      - 14063 00:00:00
ylp       0.0  19    - poll_s    -      - 14064 00:00:00
ylp      44.5  19    - -         -      - 14065 00:15:30
ylp      44.5  19    - -         -      - 14066 00:15:30
ylp      44.4  19    - -         -      - 14067 00:15:29
ylp      44.5  19    - -         -      - 14068 00:15:30
ylp      44.5  19    - -         -      - 14069 00:15:30
ylp      44.5  19    - -         -      - 14070 00:15:30
ylp      44.5  19    - -         -      - 14071 00:15:30
ylp      44.6  19    - -         -      - 14072 00:15:32
ylp       2.2  19    - futex_    -      - 14073 00:00:46
ylp       0.0  19    - futex_    -      - 14074 00:00:00
ylp       0.0  19    - futex_    -      - 14075 00:00:00
ylp       0.0  19    - futex_    -      - 14076 00:00:00
ylp       0.7  19    - futex_    -      - 14077 00:00:15

从输出信息可以看出,14065~14072之间的线程CPU占用率都很高

2.3、查看问题线程堆栈
挑选TID为14065的线程,查看该线程的堆栈情况,先将线程id转为16进制,使用printf "%x " tid命令进行转换

[[email protected] ~]$ printf "%x
" 14065
36f1

再使用jstack命令打印线程堆栈信息,命令格式:jstack pid |grep tid -A 30

[[email protected] ~]$ jstack 14063 |grep 36f1 -A 30
"GC task thread#0 (ParallelGC)" prio=10 tid=0x00007fa35001e800 nid=0x36f1 runnable 
"GC task thread#1 (ParallelGC)" prio=10 tid=0x00007fa350020800 nid=0x36f2 runnable 
"GC task thread#2 (ParallelGC)" prio=10 tid=0x00007fa350022800 nid=0x36f3 runnable 
"GC task thread#3 (ParallelGC)" prio=10 tid=0x00007fa350024000 nid=0x36f4 runnable 
"GC task thread#4 (ParallelGC)" prio=10 tid=0x00007fa350026000 nid=0x36f5 runnable 
"GC task thread#5 (ParallelGC)" prio=10 tid=0x00007fa350028000 nid=0x36f6 runnable 
"GC task thread#6 (ParallelGC)" prio=10 tid=0x00007fa350029800 nid=0x36f7 runnable 
"GC task thread#7 (ParallelGC)" prio=10 tid=0x00007fa35002b800 nid=0x36f8 runnable 
"VM Periodic Task Thread" prio=10 tid=0x00007fa3500a8800 nid=0x3700 waiting on condition 

JNI global references: 392

从输出信息可以看出,此线程是JVM的gc线程。此时可以基本确定是内存不足或内存泄露导致gc线程持续运行,导致CPU占用过高。
所以接下来我们要找的内存方面的问题

3、内存问题定位
3.1、使用jstat -gcutil命令查看进程的内存情况

[[email protected] ~]$ jstat -gcutil 14063 2000 10

  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
  0.00   0.00 100.00  99.99  26.31     42   21.917   218 1484.830 1506.747
  0.00   0.00 100.00  99.99  26.31     42   21.917   218 1484.830 1506.747
  0.00   0.00 100.00  99.99  26.31     42   21.917   219 1496.567 1518.484
  0.00   0.00 100.00  99.99  26.31     42   21.917   219 1496.567 1518.484
  0.00   0.00 100.00  99.99  26.31     42   21.917   219 1496.567 1518.484
  0.00   0.00 100.00  99.99  26.31     42   21.917   219 1496.567 1518.484
  0.00   0.00 100.00  99.99  26.31     42   21.917   219 1496.567 1518.484
  0.00   0.00 100.00  99.99  26.31     42   21.917   220 1505.439 1527.355
  0.00   0.00 100.00  99.99  26.31     42   21.917   220 1505.439 1527.355
  0.00   0.00 100.00  99.99  26.31     42   21.917   220 1505.439 1527.355

从输出信息可以看出,Eden区内存占用100%,Old区内存占用99.99%,Full GC的次数高达220次,并且频繁Full GC,Full GC的持续时间也特别长,平均每次Full GC耗时6.8秒(1505.439/220)。根据这些信息,基本可以确定是程序代码上出现了问题,可能存在不合理创建对象的地方

3.2、分析堆栈
使用jstack命令查看进程的堆栈情况

[[email protected] ~]$ jstack 14063 >>jstack.out

把jstack.out文件从服务器拿到本地后,用编辑器查找带有项目目录并且线程状态是RUNABLE的相关信息,从图中可以看出ActivityUtil.java类的447行正在使用HashMap.put()方法

Paste_Image.png
3.3、代码定位
打开项目工程,找到ActivityUtil类的477行,代码如下:

Paste_Image.png
找到相关同事了解后,这段代码会从数据库中获取配置,并根据数据库中remain的值进行循环,在循环中会一直对HashMap进行put操作。

查询数据库中的配置,发现remain的数量巨大

Paste_Image.png
至此,问题定位完毕。

参考文档:记一次线上Java程序导致服务器CPU占用率过高的问题排除过程

以上是关于CPU温度过高!排除了风扇问题也没中毒的主要内容,如果未能解决你的问题,请参考以下文章

重装了系统后CPU温度过高

CPU 温度过高 高手进

急!CPU温度过高!!解决!!!

求高手解CPU占用率过高,导致温度高怎么办。

如何解决主板开机提示CPU overload的问题?

Ubuntu18.04 cpu温度过高-kworker占用cpu过高