用sensors命令配合coretemp(intel)或k10temp(amd)驱动是最轻量可靠的cpu温度监控方式;需确保内核模块加载、权限正确、路径准确,并关注单核瞬时温度而非封装平均值。

直接看结论:用 sensors 命令配合内核 coretemp(Intel)或 k10temp(AMD)驱动,是最轻量、最可靠、最贴近硬件的实时温度监控方式;但前提是传感器已被正确加载——很多用户卡在第一步就失败,不是工具不行,而是没打通内核到用户的通路。
为什么 sensors 显示 0℃ 或 “No sensors found”
这不是软件问题,是内核模块没加载或权限/路径没对上。常见现象包括:sensors-detect 扫不到设备、/sys/class/hwmon/ 下有目录但 temp*_input 文件读出来是 0、或者 coretemp 模块存在却显示 “Package id 0: +0.0°C”。
- Intel CPU 必须确认
coretemp已加载:lsmod | grep coretemp;若无输出,手动加载:sudo modprobe coretemp - AMD Ryzen/EPYC 用户注意:
k10temp默认只暴露主板温度,要启用 CPU 核心温度需加内核参数:amd_iommu=on k10temp.polling_rate=2000(写入/etc/default/grub的GRUB_CMDLINE_LINUX后运行sudo update-grub && sudo reboot) -
sensors-detect过程中遇到 “Probe it now?” 提示时,务必选 YES;它会自动添加modprobe配置到/etc/modules,否则重启后模块丢失 - 普通用户无法直接读
/sys/class/hwmon/hwmon*/temp*_input?加入hwmon用户组:sudo usermod -aG hwmon $USER,然后重新登录
sensors 输出里哪些温度值真正反映 CPU 负载热点
别只盯着 “Package id 0” —— 它是封装级平均温度,滞后且平滑;真正决定是否降频的是单核瞬时温度,尤其 Core 0/1 这类常驻调度核心。
- “Core X: +XX.X°C” 行才是每个物理核心的实测值,单位为摄氏度,数值来自 MSR 寄存器直读,延迟
- 注意括号里的
high = +82.0°C和crit = +100.0°C:前者是 Intel TjMax 偏移阈值,触发thermald介入;后者是硬关机临界点,不可靠,仅作参考 - 如果某核心持续比 Package 高 8℃ 以上,说明该核正在高频满载(如编译、FFmpeg 单线程转码),此时即使 Package 温度才 75℃,也已逼近降频起点
- Raspberry Pi 用户请改看
bcm2835_thermal的temp1_input,单位是毫摄氏度(如 58250 = 58.25℃),别直接当摄氏度用
怎么用最小开销实现“超 85℃ 自动告警+降频干预”
不用写完整服务,一行 while 循环 + 内核接口就够了。关键是要绕过用户态轮询延迟,直接读 /sys 文件,避免 watch -n 1 sensors 这种高开销方案。
- 实时读取最敏感核心温度(以 Core 0 为例):
cat /sys/class/hwmon/hwmon*/temp*_label 2>/dev/null | grep "Core 0" -A1 | tail -1 | tr -d '+' | cut -d' ' -f1 | cut -d'.' -f1 - 触发告警脚本(比如弹窗):
if [ $(cat /sys/class/hwmon/hwmon0/temp2_input) -gt 85000 ]; then notify-send "CPU高温" "Core 0: $(cat /sys/class/hwmon/hwmon0/temp2_input | awk '{printf "%.1f", $1/1000}')°C"; fi - 更激进的干预:写入
/sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq限制频率(如echo 1200000 | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq),比等系统自动降频更快 - 注意:所有
/sys/class/hwmon/下的路径不固定,建议先用find /sys/class/hwmon -name "temp*_label" | xargs grep -l "Core 0"定位真实路径,再固化脚本
最易被忽略的一点:温度读数本身有 ±1.5℃ 硬件误差,且不同核心传感器校准不一致。别把告警阈值卡死在 85℃,建议设为 82–83℃ 并持续 3 秒才触发——否则风扇启停抖动、误报频繁,反而掩盖真实过热问题。











