我的桌面有一个坏习惯。当我运行多个高强度应用程序并且我的CPU在一段时间内处于最大使用率时,核心温度会上升并且我的计算机会自动关闭。
有没有办法可以在后台监视(编写脚本)我的CPU温度,并在温度高于特定温度时发出某种警告?
我正在运行 Opensuse,并使用 dwm 作为窗口管理器。我通常用来sensors
查看我的CPU温度。
答案1
您可以编写一个脚本来在 dwm 的状态栏中显示您的温度,例如:
temp (){
awk '{print $4"°C"}' <(acpi -t)
echo $temp
}
xsetroot -name "$(temp)"
您的sensors
输出可能会更复杂,具体取决于您的设置:这适用于我的一台机器:
awk '/temp1/ {print +$2"°C"}' <(sensors)
如果你打补丁状态颜色,您还可以让输出在$temp
达到更高值时改变颜色......
Arch Wiki 介绍了如何设置基本状态栏脚本dwm 站点包括.xinitrc 示例。
您可以查看我的dwm-status
脚本以了解更多详细信息:http://beta.intuxication.org/jasonwryan/archer/file/tip/Scripts/dwm-status
答案2
对于处理这个问题,我建议采取三件事:
检查你的物理冷却
CPU自动关闭系统用于在极端情况下,当其内部温度限制策略(见下文)不起作用时,以保护CPU。
我建议检查您的冷却系统:清除计算机上的灰尘,检查风扇是否运行,检查散热器是否足够“大”并使用适当的导热膏(或垫),以确保适当的散热。
配置 CPU 内部温度限制
CPU 通常内置有内部温度限制系统,以避免危险的过热。这种保护通常利用降低性能(限制)的策略,例如:
- 降低CPU频率,
- 降低CPU电压,
- 短暂停止 CPU 时钟信号。
在我的笔记本电脑的英特尔酷睿 CPU 上,自动保护启动的最高允许温度为100°C
(这是一个非常常见的硬限制)。英特尔还提供了一个可配置的偏移量,以进一步降低该值。得到的offset=8
结果是92°C
有限度的。
从Linux 5.4开始sysfs
,您可以通过以下方式读取和更新 Intel CPU 限制:
# cd /sys/bus/pci/drivers/proc_thermal/0000:00:04.0
# cat tcc_offset_degree_celsius
3
# echo 8 >| tcc_offset_degree_celsius
# cat tcc_offset_degree_celsius
8
这将为您的 CPU 本身提供额外的过热保护,让您高枕无忧。
使用系统守护进程 ( thermald
) 来管理 CPU 温度
另一种选择是使用该thermald
程序,其主要目的是从操作系统端监控 CPU 温度并采取措施限制发热,前达到硬件限制。
它还使用以下技术:要求 CPU 限制其电力消耗(TDP 限制)、要求 CPU 降低其 p_state(频率)、更改内核cpufreq
参数(即要求它使用节能方法),通过特定插入“CPU空闲时间”内核驱动程序,提高风扇速度...
这一页提供了很好的介绍thermald
。
答案3
我有完全相同的问题,我使用的是“cpufreqtools”(或只是“cpufreq” - 不记得了!)包。
它为您提供两个命令:cpufreq-info 和 cpufreq-set
cpufreq-info 列出当前 CPU 速度以及最小和最大速度。以及可用的步骤。
cpufreq-set 对您更有用,因为您可以限制 CPU 所能达到的最大速度。
我的容易过热的CPU有800MHz、1.60GHz和1.80GHz的可用速度。所以,我所做的就是将其限制为 1.60GHz,如下所示:
cpufreq-set --最大 1.60Ghz
奇迹般有效!
如果您的 Linux 技能更先进,您甚至可以将其放入启动脚本中,这样它总是在您的 Linux 启动时立即执行。
祝你好运。
答案4
我创建了一个脚本来直接解决此类过热问题。根据所需温度限制 CPU。它在后台自动运行,如下所示:
sudo ./temp_throttle.sh 80
该命令将使您的 CPU 核心在达到 80 摄氏度时减慢速度。当温度下降时,CPU 核心将再次运行得更快。你可以找到temp_throttle 在这里。