CPU 与调度60 条

温度与降频排查

CPU 因温度或功耗墙降频时表现为性能下滑、频率低于标称;从 thermal zone、dmesg 与 /proc/cpuinfo 三处交叉验证。

温度与降频排查

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 度,直接当整数解读会严重误判。
先用物理手段排除散热、风道与积尘问题,再怀疑软件配置;虚拟机上温度不可见,需要宿主侧或平台监控佐证。

常见触发原因

  • 散热不足:风扇故障、风道被遮挡或长期积尘
  • 环境温度过高:机柜进风温度超出设备设计范围
  • 功耗墙:持续满载触及功耗限制后主动降频
  • 虚拟化:宿主资源竞争导致虚机可用算力下降,表现与降频相似

易错点

  • 忽略单位:把千分之一摄氏度当整摄氏度,判断结论完全反转
  • 在虚拟机内找温度:传感器通常不可见,降频可能来自宿主或云平台
  • 只改配置不查散热:物理因素未排除前,软件侧改动基本无效
  • 把瞬时高频波动当异常:突发负载下频率起伏正常,要看持续趋势
  • 只调调速器不管功耗墙:PL1、PL2 等限制在固件侧,操作系统无法直接放开

数据来源与参考

  • Linux 内核 Documentation/driver-api/thermal/
  • 内核 dmesg 输出
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌