
夏天到了,你给自己开了空调。服务器呢?机房的空调要是不够冷,或者你那台放在办公室角落的测试机,可能正在默默升温。等它热到一定程度,会自动降频,然后关机。
硬盘对温度尤其敏感。超过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°C | 60-70°C | >80°C |
| CPU(满载) | 50-70°C | 75-85°C | >90°C |
| 机械硬盘 | 25-40°C | 45-50°C | >55°C |
| NVMe SSD | 30-50°C | 60-70°C | >80°C |
| 主板/芯片组 | 30-50°C | 60-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或在线工具画折线图。如果发现温度曲线在持续走高(比如每天的最高温度都在增加),说明散热系统可能有问题。
温度过高怎么办?
- 检查风扇:
sensors输出里能看到风扇转速。如果风扇转速为0或很低,可能是坏了或没插。 - 清理灰尘:服务器内部积灰会堵住散热片。关机,用压缩空气吹。重点清理CPU散热器、电源风扇、机箱进风口。
- 改善通风:如果是办公室的塔式服务器,不要塞在角落,前后留出20cm空间。如果是机房机柜,检查前后挡板是否在散热路径上。
- 降低CPU使用率:温度高可能是因为CPU一直在跑。优化你的代码,或者增加服务器数量分担负载。
- 硬件升级:换更大的散热器,或者把机械硬盘换成SSD(发热更低)。
一个真实案例
某个创业公司,一台数据库服务器放在办公室角落。夏天某天突然宕机,重启后依然不稳定。排查发现,CPU温度持续在90度以上,散热器被灰尘堵死。清理后温度降到45度,服务器恢复稳定。老板说:“早知道就花20分钟清一下灰,不至于停机半天。”
最后一句
温度是服务器健康的体温计。夏天来了,花10分钟装好lm-sensors,配置好告警。别等服务器烧了再后悔。
温度监控不用天天盯着。设置好告警,太热了它会告诉你。你需要做的,只是在收到告警时,去清一下灰,或者把机柜门打开透透气。




