当前位置:首页 > Linux > 正文

linux 如何查看cpu温度

Linux查看CPU温度可用 sensors命令(需先装 lm-sensors包),或读 /sys/class/thermal/

Linux系统中查看CPU温度是系统运维、性能优化及故障排查的重要环节,由于Linux发行版众多且硬件架构差异较大,本文将围绕主流方案展开详细说明,涵盖命令行工具、内核接口、第三方软件等多种实现方式,并提供完整操作示例与注意事项,以下是具体实施步骤及技术解析:


核心原理与前置条件

CPU温度数据通常通过以下途径获取:

  1. 硬件监测芯片:现代主板集成IT87系列、ACPI等温控芯片,通过I²C总线与CPU通信;
  2. 操作系统接口:Linux内核通过coretempacpi_thermal等驱动模块暴露温度数据;
  3. 厂商专用接口:部分笔记本/服务器提供OEM定制接口(如Dell iDRAC)。

必要准备

项目 说明
权限要求 普通用户可读取基础数据,修改配置需sudo
依赖组件 lm-sensors套件(多数发行版默认未安装)、内核模块
适用场景 物理机/虚拟机均可(虚拟机需宿主机支持虚拟化测温)
典型误差范围 ±2℃(受BIOS设置、散热条件影响)

主流查看方法详解

方法1:通过sensors命令(推荐)

此为最通用方案,基于lm-sensors项目实现。

步骤1:安装依赖

# Debian/Ubuntu系
sudo apt update && sudo apt install lm-sensors -y
# RHEL/CentOS系
sudo yum install epel-release && sudo yum install lm_sensors -y

步骤2:检测探头并生成配置文件

sudo sensors-detect --auto
# 根据提示选择YES确认自动检测(默认会跳过非必要设备)

该命令会在/etc/sensors.conf生成适配当前硬件的配置。

步骤3:查看实时温度

sensors | grep 'Package id'  # 显示封装级温度(最接近实际CPU温度)
# 示例输出:Coretemp-isa-0000: Package id 0: +52.5°C (high = +95.0°C, crit = +105.0°C)

关键字段解析:

  • Package id: CPU插槽整体温度(含缓存)
  • Core: 各核心独立温度
  • Physical id: 多路CPU时的编号区分
  • high/crit: 警告/危险阈值

进阶用法:定时监控+告警

watch -n 1 "sensors | grep 'Package id'"  # 每秒刷新一次

方法2:直接读取内核接口

适用于未安装lm-sensors或需快速验证的场景。

路径定位

ls /sys/class/thermal/thermal_zone/temp
# 常见路径示例:/sys/class/thermal/thermal_zone0/temp

读取原始数据

cat /sys/class/thermal/thermal_zone0/temp
# 输出示例:52350(单位:毫摄氏度,即52.35℃)

转换为易读格式

echo $(($(cat /sys/class/thermal/thermal_zone0/temp)/1000))°C
# 或使用awk格式化:awk '{print int($1/1000),"°C"}' /sys/class/thermal/thermal_zone0/temp

注意事项

  • 不同厂商路径可能不同(如Intel平台可能在intel_power/runtime_power_limit
  • 数值未经校准,建议优先使用方法1

方法3:使用hwinfo工具

提供更详细的硬件信息汇总。

安装与使用

# Ubuntu/Debian
sudo apt install hwinfo
hwinfo --sensors          # 显示所有传感器数据
# 过滤CPU相关项:hwinfo --sensors | grep -i "cpu|core"

方法4:图形化工具(可选)

适合桌面用户进行可视化监控:
| 工具名称 | 特点 | 安装命令 |
|—————-|—————————————|——————————|
| PSensor | 轻量级GUI,支持多语言 | sudo apt install psensor |
| Conky | 可定制桌面面板显示 | sudo apt install conky-all |
| GKrellM | 专业级监控仪表盘 | sudo snap install gkrellm |


不同发行版特殊处理

发行版 注意事项 解决方案
Fedora SELinux限制访问/dev/mem 临时关闭SELinux:sudo setenforce 0
Arch Linux AUR仓库提供增强版lm_sensors yay -S lm_sensors
OpenSUSE 默认启用YaST硬件检测 通过YaST > Hardware Information查看
WSL(Windows) 不支持原生测温 改用Windows资源监视器

常见问题排查

️ 现象1:sensors命令无输出或报错

原因分析

  1. 未正确执行sensors-detect导致驱动未加载;
  2. 老旧硬件不被lm-sensors支持;
  3. 安全启动(Secure Boot)阻止模块加载。

解决方案

# 手动加载模块
sudo modprobe coretemp
sudo modprobe acpi_thermal
# 重新运行检测向导
sudo sensors-detect --auto --yes

️ 现象2:温度异常偏高(>90℃)

可能原因

  • 硅脂老化导致导热不良;
  • 散热器积灰堵塞风道;
  • BIOS中PL1/PL2功耗墙设置过低;
  • 干扰/挖矿程序占用资源。

诊断步骤

  1. 进入BIOS查看空闲时基础温度;
  2. 使用top/htop检查异常进程;
  3. 单线程压力测试验证满载温度:stress -c 1 --timeout 60

扩展应用示例

自动化温控脚本

#!/bin/bash
MAX_TEMP=85      # 设定最高允许温度
CURRENT=$(sensors | grep 'Package id' | awk '{print $3}' | cut -d'+' -f2)
if [ "$(echo "$CURRENT > $MAX_TEMP" | bc)" -eq 1 ]; then
    echo "高温警告!当前温度:${CURRENT}℃" >> /var/log/temp_alert.log
    # 此处可添加降频/关机等操作
fi

温度日志分析(配合Grafana)

  1. 安装Collectd+Python插件收集数据;
  2. 配置数据源指向/sys/class/thermal/.../temp
  3. 创建折线图展示24小时温度波动趋势。

相关问答FAQs

Q1: 如果sensors命令显示”No data available”怎么办?

A: 这是最常见的兼容性问题,按以下顺序排查:

  1. 确保已执行sudo sensors-detect --auto并重启;
  2. 尝试指定特定芯片组:sudo sensors-detect --chipset auto
  3. 检查dmesg日志是否有错误:dmesg | grep -i sensor
  4. 对于AMD EPYC服务器,需额外安装amd64-microcode固件包。

Q2: 为什么同一台机器不同工具显示的温度不一致?

A: 主要原因包括:
| 差异来源 | 具体表现 | 处理方法 |
|—————-|———————————–|—————————|
| 测量位置不同 | 封装级(Package) vs 核心级(Core) | 根据需求选择对应指标 |
| 采样频率差异 | 瞬时值 vs 平均值 | 统一使用相同时间间隔采样 |
| 单位转换误差 | 摄氏/华氏混淆 | 确认单位制式 |
| 虚拟化干扰 | KVM虚拟机可能返回宿主机温度 | 在宿主机直接测量更准确 |
| BIOS限制 | 部分主板人为降低报告温度 | 进入BIOS禁用节能模式

0