拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Ubuntu下CPU与GPU温度监控:lm-sensors与nvidia-smi实战指南

1. 为什么要在 Ubuntu 下盯紧 CPU 和 GPU 温度在 Ubuntu 上跑深度学习训练、视频渲染或者长时间编译内核的人大概都遇到过这种情况风扇突然狂转、机器开始卡顿、然后进程莫名其妙被杀掉。十有八九是温度撞到了硬件保护阈值系统主动降频甚至断电保护了。Windows 下有鲁大师、HWMonitor 这类图形化工具鼠标一点就能看到温度曲线但换到 Ubuntu 之后很多人第一反应是这系统怎么看温度然后就卡住了。这篇内容就是解决这个问题的。核心工具是lm-sensors配合 NVIDIA 显卡的nvidia-smi再加上一些磁盘和 GPU 的补充手段基本能把一台 Ubuntu 机器的温度状况摸得清清楚楚。适合的人群很明确刚装完 Ubuntu 想监控硬件状态的新手、跑 GPU 计算需要盯温度的开发者、以及做嵌入式或服务器运维需要批量采集温度数据的人。不需要你懂内核驱动只要会敲几条命令就行。我自己的主力机器是一台带 RTX 4060 Laptop GPU 的笔记本另外还有几台纯 CPU 的编译服务器这套方法在台式机、笔记本、虚拟机上表现不太一样后面会分别说清楚。先把结论放前面lm-sensors 负责 CPU 和主板传感器nvidia-smi 负责 NVIDIA 独显AMD 显卡用 rocm-smiIntel 核显目前没有特别靠谱的独立温度读取方式。这个分工记住后面就不会乱。2. 核心工具选型与原理拆解2.1 lm-sensors 到底在干什么很多人以为 lm-sensors 是一个读温度的工具其实它更像一个传感器翻译层。你的主板上有一堆硬件监控芯片比如常见的 ITE IT87 系列、Nuvoton NCT 系列、Fintek F 系列这些芯片通过 I2C 或 LPC 总线挂在主板上负责采集电压、风扇转速、温度等模拟信号。Linux 内核里有对应的驱动模块比如it87、nct6775、coretemp但内核只负责把原始数据暴露到/sys/class/hwmon/下面格式是裸的、没有标签的。lm-sensors 做的事情就是读取这些 hwmon 接口然后根据芯片型号和主板布局把temp1翻译成CPU Core 0、fan2翻译成机箱风扇这种人类能看懂的名字。所以你会看到sensors命令输出的第一行往往是芯片型号比如coretemp-isa-0000这就是 CPU 内部数字温度传感器DTS的驱动。注意lm-sensors 本身不产生数据它只是数据的搬运工和翻译官。如果内核没加载对应驱动sensors 命令会显示没有找到传感器这时候要回头检查驱动模块。2.2 为什么 GPU 要单独处理CPU 温度走的是主板传感器这条路但独立显卡是另一套体系。NVIDIA 显卡有自己的管理接口通过nvidia-smi这个命令行工具暴露出来温度字段叫Temperature单位是摄氏度。AMD 显卡对应的是rocm-smiIntel 核显就比较尴尬了它和 CPU 封装在一起温度通常混在 CPU 的 package 温度里没有独立的核显温度读数。这里有个常见误区有人以为sensors命令能读出 NVIDIA 显卡温度实际上除非你装了nvidia-smi并且显卡驱动正常否则 sensors 里根本不会出现 GPU 相关的条目。我见过不少人折腾半天 sensors-detect结果发现独显温度压根不走这条路。2.3 工具组合方案对比工具覆盖范围安装难度输出可读性适用场景lm-sensorsCPU、主板、部分硬盘低好通用温度监控nvidia-smiNVIDIA 独显低随驱动极好GPU 计算、游戏rocm-smiAMD 独显中好AMD GPU 计算hddtemp / smartctl硬盘温度中一般存储健康监控psensor图形化汇总低极好桌面用户日常看选型逻辑很简单先装 lm-sensors 打底有 NVIDIA 卡就加 nvidia-smi需要图形界面就上 psensor。不要一上来就装一堆工具先把命令行跑通理解数据从哪来再考虑图形化。3. 实操过程从零到能看温度3.1 安装 lm-sensors 并探测传感器第一步永远是更新软件源然后安装sudo apt update sudo apt install lm-sensors装完之后不要急着运行sensors先跑探测脚本sudo sensors-detect这个脚本会问你一堆问题比如是否扫描 I2C/SMBus 适配器、是否探测超级 I/O 芯片。新手建议一路回车用默认值默认值基本都是安全的。脚本最后会告诉你需要加载哪些内核模块通常它会自动帮你写进/etc/modules或者提示你用systemctl加载。探测完成后加载模块并验证sudo systemctl restart kmod sudo sensors如果输出里出现了coretemp-isa-0000并且有Package id 0、Core 0这些条目说明 CPU 温度已经能读了。如果只显示acpitz-acpi-0这种说明走的是 ACPI 热区精度会差一些但也能用。3.2 读懂 sensors 的输出一个典型的输出长这样coretemp-isa-0000 Adapter: ISA adapter Package id 0: 52.0°C (high 100.0°C, crit 100.0°C) Core 0: 50.0°C (high 100.0°C, crit 100.0°C) Core 1: 51.0°C (high 100.0°C, crit 100.0°C)这里要重点看三个值当前温度、high 阈值、crit 阈值。high 是警告线crit 是临界线超过 crit 系统通常会强制降频或关机。笔记本上 Package id 0 到 80°C 以上就要留意了台式机散热好的话 70°C 以内都算正常。实操心得sensors默认只输出一次想看动态变化用watch -n 1 sensors每秒刷新一次。跑压力测试的时候这个命令特别好用。3.3 NVIDIA GPU 温度读取如果你有 NVIDIA 显卡驱动装好之后nvidia-smi应该已经在了。直接运行nvidia-smi右上角会显示Temp和Fan比如65C 45%。想要更细的实时监控nvidia-smi -l 1-l 1表示每秒刷新一次。如果只想看温度这一项nvidia-smi --query-gputemperature.gpu --formatcsv -l 1这个查询格式特别适合写脚本采集输出干净没有多余信息。我跑模型训练的时候习惯开一个终端专门跑这条命令温度超过 80°C 就手动降 batch size。3.4 硬盘温度补充机械硬盘和 NVMe 固态的温度也值得关注尤其是 NVMe过热会直接掉盘。用smartctlsudo apt install smartmontools sudo smartctl -A /dev/nvme0 | grep -i temp或者用hddtemp读机械盘sudo apt install hddtemp sudo hddtemp /dev/sdaNVMe 的温度字段通常是Temperature或Composite不同厂商命名不太一样用grep -i temp过滤一下最省事。4. 常见问题与排查技巧实录4.1 sensors 输出 No sensors found这是最高频的问题。原因通常有三个内核模块没加载、sensors-detect 没跑、或者主板芯片太新驱动不支持。排查顺序先确认模块加载lsmod | grep coretemp如果没有手动sudo modprobe coretemp。再跑一次sudo sensors-detect注意看最后它建议加载哪些模块。如果芯片是 ITE IT8688E 这种较新的型号可能需要更新内核或者手动编译it87驱动。我遇到过一台 B550 主板sensors-detect 死活认不出 IT8688E最后是升级到较新的内核版本才解决。所以内核版本太老是个隐藏坑Ubuntu 22.04 默认内核一般够用但特别新的硬件可能需要手动升级。4.2 nvidia-smi 报 command not found这说明 NVIDIA 驱动没装好或者装的是开源 nouveau 驱动。检查lsmod | grep nvidia如果没有输出说明驱动没加载。Ubuntu 下推荐用ubuntu-drivers devices看推荐驱动版本然后sudo apt install nvidia-driver-xxx。装完重启nvidia-smi就有了。注意笔记本上双显卡Intel 核显 NVIDIA 独显的情况nvidia-smi 只能读独显温度核显温度混在 CPU package 里这是正常的不是工具坏了。4.3 温度读数明显不对有时候 sensors 会显示一个离谱的值比如 -128°C 或者 200°C。这通常是传感器映射错误或者驱动 bug。解决办法是在/etc/sensors3.conf里手动调整映射或者用sensors -u看原始值判断是哪个通道出了问题。如果只是某一个核心读数异常其他核心正常那大概率是传感器本身的问题不用太纠结。4.4 常见问题速查表现象可能原因解决方向No sensors found模块未加载modprobe sensors-detectnvidia-smi 找不到驱动未装ubuntu-drivers 安装温度值离谱映射错误检查 sensors3.conf只有 acpitz芯片驱动缺失升级内核或找专用驱动GPU 温度读不到核显无独立传感器正常现象看 package 温度5. 进阶玩法自动化监控与告警5.1 写一个简单的温度采集脚本命令行看温度适合临时排查长期监控还是得脚本化。下面这个 bash 脚本每分钟采集一次 CPU 和 GPU 温度追加到日志#!/bin/bash LOG/var/log/temp_monitor.log CPU_TEMP$(sensors | grep Package id 0 | awk {print $4} | tr -d °C) GPU_TEMP$(nvidia-smi --query-gputemperature.gpu --formatcsv,noheader,nounits) echo $(date %Y-%m-%d %H:%M:%S) CPU:${CPU_TEMP}C GPU:${GPU_TEMP}C $LOG配合 crontab 每分钟跑一次* * * * * /home/user/temp_monitor.sh这个脚本我用了大半年日志攒下来可以直接画温度曲线排查偶发过热特别有用。5.2 超过阈值自动告警在脚本里加个判断超过 85°C 就写系统日志if [ $CPU_TEMP -gt 85 ]; then logger CPU temperature warning: ${CPU_TEMP}C filogger会把消息写进/var/log/syslog配合journalctl -f就能实时看到。更狠一点可以发邮件或者调用 webhook但那就看个人需求了。5.3 图形化方案 psensor不想天天敲命令的话psensor是个不错的选择sudo apt install psensor装完在应用菜单里打开它会自动读取 lm-sensors 和 nvidia-smi 的数据画成实时曲线还能设置阈值弹窗。桌面用户强烈推荐服务器用户还是老老实实用脚本。6. 不同硬件场景下的经验差异6.1 笔记本温度波动大看 package 更准笔记本的散热设计决定了它的温度波动比台式机大得多。我实测同一台机器空载 CPU 45°C跑编译瞬间冲到 90°C然后风扇拉满降到 75°C。这种情况下单看某一瞬间的 Core 温度意义不大要看 Package id 0 的均值。另外笔记本上high阈值经常设成 100°C但实际到 95°C 就该警惕了长期高温对电池和主板都不友好。6.2 台式机散热好关注 GPU 热点台式机 CPU 温度一般很稳风冷压得住的话满载 70°C 以内。但 NVIDIA 显卡有个Hot Spot温度nvidia-smi 默认不显示需要用nvidia-smi -q -d TEMPERATURE才能看到。Hot Spot 通常比核心温度高 10-15°C如果 Hot Spot 超过 100°C说明显卡散热该清灰了。6.3 虚拟机读不到真实温度VMware 或 VirtualBox 里装的 Ubuntusensors基本读不到宿主机温度因为虚拟机没有直接访问硬件传感器的权限。这时候要么在宿主机上看要么用虚拟化平台自带的监控接口。别在虚拟机里折腾 sensors-detect纯属浪费时间。6.4 服务器批量采集用 IPMI如果是机架服务器主板一般支持 IPMI用ipmitool能读到更全面的温度数据包括进风口、出风口、内存、硬盘背板等sudo apt install ipmitool sudo ipmitool sensor | grep -i temp这个比 lm-sensors 覆盖更广适合机房环境。7. 几个容易踩的坑和我的实际体会第一个坑是权限问题。sensors普通用户就能跑但sensors-detect必须 sudosmartctl读 NVMe 也要 sudo。写脚本的时候记得处理好权限否则 cron 里跑会静默失败。第二个坑是单位换算。nvidia-smi 的--formatcsv,noheader,nounits输出的是纯数字不带 °C脚本里做数值比较很方便。但 sensors 的输出带和°C必须用tr或awk清洗我第一次写脚本就是忘了清洗导致比较逻辑全错。第三个坑是温度不是唯一指标。有时候温度正常但风扇转速异常或者温度正常但性能下降那可能是功耗墙或者驱动问题。温度只是硬件健康的一个维度别把它当成万能诊断工具。我个人的习惯是新机器装完 Ubuntu第一件事就是装 lm-sensors 跑一遍 sensors-detect确认 CPU 温度能读有独显的再确认 nvidia-smi 正常。这两步做完后面跑任何重负载任务心里都有底。至于图形化工具桌面机装个 psensor 图省事服务器就靠脚本加日志简单可靠。最后分享一个小技巧watch -n 0.5 sensors | grep Package这个命令在跑压力测试的时候特别好用半秒刷新一次能清楚看到温度爬升和风扇响应的延迟。如果发现温度涨得特别快但风扇半天不转那就要检查风扇曲线设置了这往往是散热问题的根源。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门