我正在sensors-detect
我的系统上运行,lm-sensors
因为我的系统在我观看 YouTube 视频时不断关闭
所以我想知道如何在不使用第三方软件的情况下手动找到风扇和 CPU 的温度lm-sensors
?我只是不确定它们存储在哪里。
processor : 0
vendor_id : AuthenticAMD
cpu family : 16
model : 6
model name : AMD Athlon(tm) II X2 240e Processor
power management: ts ttp tm stc 100mhzsteps hwpstate
x86_64
答案1
听起来您想要的是/sys/class/hwmon
和/sys/class/thermal
。
这两个目录都提供基于 shell 的简单数据访问(hwmon 目录还将包含其他传感器类型)。每个目录都针对系统中的每个传感器接口(可能有多个传感器)都有一个目录。
但还有三件事需要注意:
- 除非你的系统真的很差,
sensors
否则每秒运行一次该命令也不会产生任何明显的影响。事实上,定期读取上述目录中的文件可能会产生更大的影响。 - 图表是你的好朋友。我建议运行 netdata 或 collectd 之类的程序,这样你就可以查看实时(或接近实时)的数据。
- 还要检查电压。您所描述的情况也可能是由于电源无法满足系统的功率要求。当系统处于高负载状态时,电压会大幅下降。
答案2
这个答案是关于通过直接访问机器特定寄存器(MSR)手动监控某些英特尔处理器的处理器温度的一种方法。
首先要注意的是,在这种情况下,从 MSR 读取的内容是相对于极限温度 Tcc 的,因此需要进行额外的计算来确定实际温度。
请参阅Intel® 64 和 IA-32 架构软件开发人员手册,或者在您的情况下是 AMD 等效产品。
就我而言,我需要 0x1B1 处的 MSR 的 22-16 位,即 IA32_PACKAGE_THERM_STATUS。我较旧的 i7-2600K 的 Tcc 为 98 度。
这是一个手动监控温度(和 CPU 频率)的简单脚本:
#! /bin/dash
#
# temp_mon3 Smythies 2016.10.05
# a simplified version of temp_mon2,
# for monitoring temp.
# Note: it is on purpose that -a is not used.
# Also CPU0 frequency (1 is good enough, when all
# are loaded).
#
# temp_mon2 Smythies 2016.09.29
# Monitor Package temperatures.
# Use clock modulation to control temps.
# i.e. simulate the second to last level
# of defense.
# Use simple primatives.
# run as sudo
# hardcoded for my tcc of 98 degrees.
#
echo ... begin package temperature monitoring ...
#
# In case I forgot (which I often do)
modprobe msr
#
# first let the drastic effect of the sudo command decay
# Done later in temp_mon3.
#
# some stuff
COMMAND="rdmsr --bitfield 22:16 -u 0x1B1"
COMMAND2="cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq"
#
# then get on with it
while [ 1 ];do
sleep 4
TEMP_RAW=$(eval $COMMAND)
CPU0_FREQ=$(eval $COMMAND2)
TEMP_ACT=$((98-TEMP_RAW))
echo "$TEMP_ACT $CPU0_FREQ"
done
下面是一些示例输出,我在一段时间后添加了一些 CPU 负载(温度从 31 度上升到 73 度):
$ sudo ./temp_mon3
[sudo] password for doug:
... begin package temperature monitoring ...
31 1605275
31 1605154
32 1605164
30 1605148
31 1605176
51 3511279
54 3511278
55 3511279
57 3511283
58 3511279
60 3511278
61 3511284
63 3511279
64 3511280
64 3511280
66 3511280
67 3511278
68 3511280
68 3511281
69 3511278
71 3511280
70 3511281
71 3511281
71 3511280
72 3511276
72 3511277
73 3511283
73 3511279
^C
答案3
这流明传感器项目(以及sensors
命令)利用库传感器库;库和包是:
Ubuntu 18.04:libsensors4,版本 3.4.0-4
sudo apt install libsensors4
Ubuntu 20.04:libsensors5,版本 3.6.0。
sudo apt install libsensors5
我还建议安装开发包(包括手册页),它与 LTS 18.04 和 LTS 20.04 相同:
sudo apt install libsensors4-dev
一些背景信息无法找到:
man libsensors
man sensors.conf
顺便说一下,这是读取目录中所见温度的同一个库sys
。
总而言之,传感器是一个不错的选择。通过命令行查看温度很容易做到
watch -n 1 sensors
如果您打算编写程序,请查看 libsensors 手册man libsensors
或使用您的/usr/share/doc/
文档。在 C 程序中,您必须包含#include <sensors/sensors.h>
标头。它将使用sensors.conf
文件/etc/sensors3.conf和/或/etc/sensors.conf/etc/sensors.d/
。如果您使用此选项,可以在 中找到进一步的(用户)配置。
如果您认为缺少一些传感器,请查看/sys/class/thermal
或链接的/sys/devices/virtual/thermal
目录。
要获取所有热区的温度,请使用以下命令
$ cat /sys/devices/virtual/thermal/thermal_zone?/temp
77000
66000
67000
温度以毫摄氏度 (mC) 为单位进行测量,在上述情况下,以摄氏度为单位测量的温度为:77.0、66.0、67.0 °C。
要连续观察温度,请使用
watch -n 1 cat /sys/devices/virtual/thermal/thermal_zone?/temp
在此目录中,您还可以找到有关冷却(风扇)设备以及 PID 调节器如何编程的信息。
此外,一些过温保护是基于编码固件/硬件的(这是一个好主意),并且其设置数据放在您的 BIOS 中。
如果您希望以 °C 而不是 °mC 显示温度,请使用 bash 计算$((value / 1000 ))
或 awk 进行以下转换:
cat /sys/devices/virtual/thermal/thermal_zone?/temp | awk '{printf " %5.2f °C\n" , $1/1000}'
答案4
由于 Linux 系统中温度是以文件 ( /sys/class/thermal/thermal_zone0/temp
) 的形式出现的,所以我们可以通过读取文件来找到答案。要纯粹通过 shell 脚本查找温度:
运行命令:
touch get_temperature.sh
新建一个空文件;在下面输入以下代码:
#!/bin/sh
TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp)
# TEMP_CEL=$(expr $TEMP_RAW / 1000)
TEMP_CEL=$(echo "scale=2;$TEMP_RAW / 1000" | bc)
TEMP_CEL_W_SIGN=temp=${TEMP_CEL}\'C
# print
echo $TEMP_CEL_W_SIGN
要使脚本可执行,请运行:
sudo chmod +x get_temperature.sh
;通过运行以下命令来执行脚本:
./get_temperature.sh
。
编辑:感谢评论部分的建议!