服务器温度监控:夏季高温如何防止宕机

服务器温度监控:夏季高温如何防止宕机

夏天到了,你给自己开了空调。服务器呢?机房的空调要是不够冷,或者你那台放在办公室角落的测试机,可能正在默默升温。等它热到一定程度,会自动降频,然后关机。

硬盘对温度尤其敏感。超过40度,寿命就开始打折扣。超过60度,离故障就不远了。

今天的工具叫lm-sensors,它能读取CPU、主板、硬盘的温度。你不需要懂硬件,照着做就行。


先看一个数据

Google的一项研究表明,温度升高15度,硬盘故障率翻倍。高温不只是“让服务器变慢”,是“让服务器变脆”。你可能觉得服务器在机房,温度不会太高。但机柜某个角落,积灰导致散热不良,局部温度可能比环境温度高20度。

我见过一个案例,硬盘连续两个月在55度以上运行,最终出现坏道,数据丢失。而监控日志显示,温度异常早就出现了,没人看。


第一步:安装lm-sensors

lm-sensors是Linux下的硬件监控工具,能读取CPU核心温度、主板温度、风扇转速。

Ubuntu/Debian:

bash

sudo apt update
sudo apt install lm-sensors -y

CentOS/RHEL:

bash

sudo yum install lm_sensors -y

安装完成后,运行检测命令,让系统自动识别硬件传感器:

bash

sudo sensors-detect

一路按回车选默认。最后会问你是否要把探测到的模块加入配置,选YES。完成后重启或手动加载模块:

bash

sudo /etc/init.d/kmod start

第二步:查看温度

直接运行sensors命令:

bash

sensors

输出类似:

text

coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +45.0°C  (high = +80.0°C, crit = +100.0°C)
Core 0:        +44.0°C  (high = +80.0°C, crit = +100.0°C)
Core 1:        +46.0°C  (high = +80.0°C, crit = +100.0°C)
  • high:建议最高温度(超过会告警)
  • crit:临界温度(超过会自动关机或降频)

硬盘温度需要单独看。用smartctl(需安装smartmontools):

bash

sudo smartctl -A /dev/sda | grep Temperature

输出Temperature_Celsius那一行,数值就是当前温度。


第三步:理解温度阈值

不同硬件的耐热能力不一样:

硬件类型正常温度注意温度危险温度
CPU(空闲)30-45°C60-70°C>80°C
CPU(满载)50-70°C75-85°C>90°C
机械硬盘25-40°C45-50°C>55°C
NVMe SSD30-50°C60-70°C>80°C
主板/芯片组30-50°C60-70°C>80°C

关键点:硬盘不要长期超过45度。机械硬盘超过50度,故障率会明显上升。CPU偶尔冲到80度问题不大,持续在85度以上就需要检查散热。

如果你是托管服务器,机柜温度过高可以向机房反馈。自己办公室的服务器,检查风扇是否积灰、风道是否通畅。


第四步:设置温度告警

被动地看温度不够,让系统自动告警才有意义。

写一个监控脚本/root/temp_check.sh

bash

#!/bin/bash

# CPU温度阈值(单位:毫摄氏度,lm-sensors输出的通常是整数摄氏度)
CPU_MAX=75
DISK_MAX=50

# 获取CPU温度(以coretemp-isa-0000的Package id 0为例)
CPU_TEMP=$(sensors | grep "Package id 0:" | awk '{print $4}' | tr -d '+°C' | cut -d. -f1)

# 如果无法获取到温度,脚本退出
if [ -z "$CPU_TEMP" ]; then
    exit 0
fi

# 检查CPU温度
if [ "$CPU_TEMP" -gt "$CPU_MAX" ]; then
    echo "$(date): CPU温度过高: ${CPU_TEMP}°C" >> /var/log/temp_warnings.log
    # 发送告警(方式见下文)
fi

# 检查硬盘温度(以/dev/sda为例)
if command -v smartctl &> /dev/null; then
    DISK_TEMP=$(sudo smartctl -A /dev/sda | grep Temperature_Celsius | awk '{print $10}')
    if [ -n "$DISK_TEMP" ] && [ "$DISK_TEMP" -gt "$DISK_MAX" ]; then
        echo "$(date): 硬盘温度过高: ${DISK_TEMP}°C" >> /var/log/temp_warnings.log
    fi
fi

给执行权限:

bash

chmod +x /root/temp_check.sh

加入crontab,每5分钟执行一次:

bash

*/5 * * * * /root/temp_check.sh

告警方式(三选一):

  • 邮件:脚本里加入mail -s "高温告警" your@email.com < /var/log/temp_warnings.log
  • 钉钉/企业微信:用curl调用Webhook
  • 简单处理:只写日志,每天手动查看一次

第五步:记录温度历史

只检查当前温度不够,你需要知道温度的变化趋势。把温度数据记下来,画成图,能提前发现散热问题。

简化版数据采集(每5分钟记录一次):

bash

*/5 * * * * echo "$(date) CPU: $(sensors | grep "Package id 0:" | awk '{print $4}')" >> /var/log/temp_history.log

用Excel或在线工具画折线图。如果发现温度曲线在持续走高(比如每天的最高温度都在增加),说明散热系统可能有问题。


温度过高怎么办?

  1. 检查风扇sensors输出里能看到风扇转速。如果风扇转速为0或很低,可能是坏了或没插。
  2. 清理灰尘:服务器内部积灰会堵住散热片。关机,用压缩空气吹。重点清理CPU散热器、电源风扇、机箱进风口。
  3. 改善通风:如果是办公室的塔式服务器,不要塞在角落,前后留出20cm空间。如果是机房机柜,检查前后挡板是否在散热路径上。
  4. 降低CPU使用率:温度高可能是因为CPU一直在跑。优化你的代码,或者增加服务器数量分担负载。
  5. 硬件升级:换更大的散热器,或者把机械硬盘换成SSD(发热更低)。

一个真实案例

某个创业公司,一台数据库服务器放在办公室角落。夏天某天突然宕机,重启后依然不稳定。排查发现,CPU温度持续在90度以上,散热器被灰尘堵死。清理后温度降到45度,服务器恢复稳定。老板说:“早知道就花20分钟清一下灰,不至于停机半天。”


最后一句

温度是服务器健康的体温计。夏天来了,花10分钟装好lm-sensors,配置好告警。别等服务器烧了再后悔。

温度监控不用天天盯着。设置好告警,太热了它会告诉你。你需要做的,只是在收到告警时,去清一下灰,或者把机柜门打开透透气。

知识库

MySQL慢查询日志:找出拖垮网站的SQL

2026-5-21 14:57:47

实操指南知识库

音视频处理服务器配置与选型建议

2024-12-3 17:23:30

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧