温度与降频排查
CPU 因温度过高或触及功耗墙而降频时,表现为性能下滑、实际频率低于标称值。排查应交叉验证三处:热区温度与触发状态、内核日志中的节流记录、以及实际运行频率。物理机上的高温多来自散热、风道与积尘;虚拟机上通常看不到温度传感器,降频发生在宿主或云平台一侧,只能靠外部监控佐证。
基本信息
| 温度读数 | /sys/class/thermal/thermal_zone*/temp,单位常为千分之一摄氏度 |
|---|---|
| 节流日志 | dmesg -T 中的 thermal 或 throttl 关键字 |
| 当前频率 | /proc/cpuinfo 的 MHz 行或 scaling_cur_freq |
| 频率上限 | scaling_max_freq,用于区分被限与自愿降频 |
| 辅助工具 | lm_sensors 的 sensors 命令(需安装) |
典型使用场景
- 性能无故下滑,怀疑由降频引起
- 高密度部署后机箱内温度升高
- 云主机性能波动,判断是否为宿主侧限制
- 压测时频率达不到预期值
- 散热改造或机房调整前后的效果对比
排查命令
排查命令
for z in /sys/class/thermal/thermal_zone*; do echo "$z $(cat $z/type 2>/dev/null) $(cat $z/temp 2>/dev/null)"; done
dmesg -T | grep -iE 'thermal|throttl' | tail -20
awk -F: '/MHz/{print $2}' /proc/cpuinfo | sort -n | head -3
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
sensors 2>/dev/null | head -20 # 若已安装 lm_sensors数据源读法
| 数据源 | 读取方式 | 用途 |
|---|---|---|
| 热区温度 | /sys/class/thermal/thermal_zone*/temp | 看是否接近触发热点 |
| 节流日志 | dmesg 中的 thermal 或 throttl 关键字 | 确认内核是否记录过降频事件 |
| 当前频率 | /proc/cpuinfo 的 MHz 行 | 判断是否长期低于标称值 |
| 频率上下限 | scaling_cur_freq 与 scaling_max_freq | 区分被限制与主动降频 |
温度读数单位通常是千分之一摄氏度,读到 45000 表示 45 度,直接当整数解读会严重误判。
先用物理手段排除散热、风道与积尘问题,再怀疑软件配置;虚拟机上温度不可见,需要宿主侧或平台监控佐证。
常见触发原因
- 散热不足:风扇故障、风道被遮挡或长期积尘
- 环境温度过高:机柜进风温度超出设备设计范围
- 功耗墙:持续满载触及功耗限制后主动降频
- 虚拟化:宿主资源竞争导致虚机可用算力下降,表现与降频相似