Linux系统温度监控
Linux系统温度监控完全指南
一、系统环境信息
操作系统版本
通过 uname -a 命令查看系统内核版本:
uname -a输出示例:
Linux debian 6.12.96+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.96-1 (2026-07-20) x86_64 GNU/Linux重要说明
uname -a 仅显示系统内核版本等静态信息,不包含温度数据。查看温度需要使用专门的工具或读取系统文件。
二、CPU温度查看方法
方法一:使用 lm-sensors 工具
这是最常用且信息最全面的方法。
1. 安装 lm-sensors
sudo apt update
sudo apt install lm-sensors2. 检测并配置传感器
运行检测脚本,整个过程按 Enter 键选择默认的 YES 选项:
sudo sensors-detect3. 查看温度
sensors输出示例:
coretemp-isa-0000
Package id 0: +45.0°C (high = +80.0°C, crit = +100.0°C)
Core 0: +42.0°C (high = +80.0°C, crit = +100.0°C)
Core 1: +43.5°C (high = +80.0°C, crit = +100.0°C)持续监控
每秒刷新一次温度数据:
watch -n 1 sensors方法二:读取系统文件 /sys/class/thermal/
这是无需安装软件的方法,但信息相对有限。
1. 基础读取
读取温度文件,输出单位为毫摄氏度(milli-Celsius),需要除以1000:
cat /sys/class/thermal/thermal_zone0/temp输出示例:45000 表示 45.0°C
2. 转换为摄氏度
awk '{printf "%.2f°C\n", $1/1000}' /sys/class/thermal/thermal_zone0/temp3. 查看所有热区类型
cat /sys/class/thermal/thermal_zone*/type输出示例:
acpitz
acpitz
x86_pkg_temp三、thermal_zone 文件详解
文件更新机制
/sys/class/thermal/thermal_zone*/temp 文件具有以下特性:
- 瞬时采样:每次读取时内核从硬件传感器获取当前实时值
- 不累加:显示的是当前时刻的温度快照,而非历史累计值
- 按需读取:文件不会主动刷新,仅在用户程序调用读取指令时才查询硬件
- 存在缓存机制:极短时间内多次读取可能返回缓存的旧值,以避免频繁访问硬件带来的性能开销
验证示例:
for i in {1..5}; do cat /sys/class/thermal/thermal_zone0/temp; sleep 1; donethermal_zone 类型说明
| 类型 | 含义 | 监控对象 |
|---|---|---|
| acpitz | ACPI Thermal Zone | 主板/机箱环境温度 |
| x86_pkg_temp | x86 Package Temperature | CPU封装温度(芯片整体温度) |
| pch_skylake | PCH Temperature | 南桥芯片温度 |
| INT3400 | Intel Dynamic Tuning | Intel动态调优热区 |
thermal_zone 目录下其他重要文件
| 文件 | 说明 |
|---|---|
| temp | 当前温度(毫摄氏度) |
| type | 热区类型标识 |
| trip_point_*_temp | 温度触发点阈值(毫摄氏度) |
| trip_point_*_type | 触发点动作类型(passive/active/critical) |
| policy | 当前温控策略 |
| mode | 温控模式(enabled/disabled) |
| available_policies | 支持的温控策略列表 |
| cdev[0-9]* | 关联的冷却设备符号链接 |
查看温度触发点
# 查看第一个触发点的温度和动作类型
cat /sys/class/thermal/thermal_zone0/trip_point_0_temp
cat /sys/class/thermal/thermal_zone0/trip_point_0_type触发点类型说明:
- passive:被动散热(降低CPU频率)
- active:主动散热(开启风扇)
- critical:临界温度(系统关机或重启)
查看温控策略和模式
cat /sys/class/thermal/thermal_zone0/policy
cat /sys/class/thermal/thermal_zone0/mode四、实用命令组合
查看特定热区温度(针对 x86_pkg_temp)
awk '{printf "%.2f°C\n", $1/1000}' /sys/class/thermal/thermal_zone2/temp自动查找 x86_pkg_temp 类型并显示温度
for i in /sys/class/thermal/thermal_zone*/type; do
if grep -q x86_pkg_temp "$i"; then
zone=$(dirname "$i")
awk '{printf "CPU温度: %.2f°C\n", $1/1000}' "$zone/temp"
fi
done查看所有存在的 thermal_zone(0、1、2)
只显示存在的,不存在的自动跳过:
for i in 0 1 2; do [ -f "/sys/class/thermal/thermal_zone$i/temp" ] && echo -n "zone$i - $(cat /sys/class/thermal/thermal_zone$i/type) - " && awk '{printf "%.2f°C\n", $1/1000}' "/sys/class/thermal/thermal_zone$i/temp"; done一次性查看所有热区信息
for i in /sys/class/thermal/thermal_zone*; do
type=$(cat "$i/type")
temp=$(awk '{printf "%.2f°C", $1/1000}' "$i/temp")
echo "$(basename $i) - $type - $temp"
done仅显示 CPU 温度(自动匹配 x86_pkg_temp)
for i in 0 1 2; do [ -f "/sys/class/thermal/thermal_zone$i/temp" ] && [ "$(cat /sys/class/thermal/thermal_zone$i/type)" = "x86_pkg_temp" ] && awk '{printf "CPU: %.2f°C\n", $1/1000}' "/sys/class/thermal/thermal_zone$i/temp"; done五、CPU负载查看
查看系统负载和CPU使用率
top -bn1 | head -5输出字段说明:
load average:系统平均负载(1分钟、5分钟、15分钟)%Cpu(s):us:用户空间占用CPU百分比sy:内核空间占用CPU百分比id:CPU空闲率wa:等待I/O完成的时间
查看平均负载
uptime六、温度判断标准
空闲状态下的温度参考
| 温度区间 | 状态判断 |
|---|---|
| 30-50°C | 很凉快,被动散热足够 |
| 50-65°C | 正常负载下的典型温度,非常安全 |
| 65-80°C | 偏高但仍在安全范围,可考虑主动散热 |
| 80°C以上 | 需要主动散热(风扇) |
| 90°C以上 | 危险区,可能降频或关机 |
满载状态下的温度参考
| 满载最高温度 | 结论 |
|---|---|
| 低于70°C | 散热片完全够用,不需要风扇 |
| 70-80°C | 勉强够用,可考虑加风扇但不是必须 |
| 80-85°C | 建议加风扇 |
| 85°C以上 | 必须加风扇,否则长期使用可能降频或损坏 |
风扇温控典型逻辑
| CPU温度区间 | 风扇状态 |
|---|---|
| 低于35-40°C | 停止或最低转速运行 |
| 40-60°C 或 50-70°C | 转速随温度升高而提升 |
| 70-80°C | 中高转速运行 |
| 90°C及以上 | 全速运转 |
七、散热片效能测试(压力测试)
安装压力测试工具
sudo apt update && sudo apt install stress -y执行压力测试并监控温度
方案一:后台运行压力测试,前台监控
stress --cpu 4 --timeout 120 &
watch -n 1 'cat /sys/class/thermal/thermal_zone2/temp 2>/dev/null | awk "{printf \"%.2f°C\n\", \$1/1000}"'方案二:一行命令完成测试和采样
stress --cpu 4 --timeout 120 & sleep 2; for i in {1..20}; do clear; echo "=== 第 $i 次采样 ==="; cat /sys/class/thermal/thermal_zone*/temp 2>/dev/null | awk '{printf "%.2f°C\n", $1/1000}'; sleep 3; done方案三:使用 watch 持续监控
watch -n 1 'cat /sys/class/thermal/thermal_zone2/temp | awk "{printf \"%.2f°C\n\", \$1/1000}"'压力测试注意事项
- 根据系统CPU核心数调整
-c参数(示例中为4核) - 建议测试至少2-5分钟,观察温度是否趋于稳定
- 如果温度持续上升无稳定趋势,应立即停止测试
八、实际案例分析
案例环境
- 系统:Debian Linux
- 内核:6.12.96+deb13-amd64
- 硬件:工程版开发板/工控板
- 散热方案:仅安装散热片(被动散热),无风扇
热区类型查询结果
cat /sys/class/thermal/thermal_zone*/type输出:
acpitz
acpitz
x86_pkg_temp对应关系:
thermal_zone0:acpitz(主板/机箱环境温度)thermal_zone1:acpitz(主板/芯片组/供电区域温度)thermal_zone2:x86_pkg_temp(CPU封装温度)
结论:CPU温度应查看 thermal_zone2。
系统负载状态
top -bn1 | head -5输出:
top - 01:57:36 up 60 days, 8:48, 1 user, load average: 0.19, 0.10, 0.09
Tasks: 136 total, 2 running, 134 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.5 us, 5.8 sy, 0.0 ni, 90.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st分析:
- CPU空闲率 90.7%
- 系统负载极低(load average: 0.19)
- 当前为轻负载状态
当前温度
当前温度 56°C(空闲状态)。
结论:
- 56°C 在空闲状态下属于正常且安全的温度
- 但空闲状态下的温度不能说明散热片的真实能力
- 需要通过压力测试验证满载时的温度表现
九、硬件温度传感器补充说明
除了CPU温度,系统还能监测以下部件的温度:
| 部件 | 说明 |
|---|---|
| 主板及芯片组 | 南桥/北桥芯片温度 |
| 显卡(GPU) | 独立显卡核心温度 |
| 硬盘(HDD/SSD) | 可通过 hddtemp 或 smartctl 读取 |
| 内存(RAM) | 部分高性能内存条(需加载 jc42 内核模块) |
| 风扇转速 | 显示风扇转速(RPM) |
查看其他部件温度的工具
hddtemp:查看硬盘温度smartctl:查看硬盘S.M.A.R.T.信息(含温度)psensor:图形化监控工具,可显示CPU、GPU、硬盘等温度
十、工程板被动散热判断流程
- 确认当前负载状态(使用 top 或 uptime)
- 如果空闲温度正常(如 56°C),执行压力测试
- 观察满载时温度最高值
根据满载温度判断是否需要加装风扇:
- 低于70°C:无需风扇
- 70-80°C:可考虑加装
- 80°C以上:建议加装
- 85°C以上:必须加装
- 同时考虑散热片物理大小作为辅助判断依据