有没有办法限制总体CPU消耗?


23

每次运行资源密集型进程(例如大型编译,提取大型tar包或...玩Flash)时,我的笔记本电脑(带有i3芯片的HP)都会过热,变得疯狂。

我目前正在研究一些散热解决方案,但有限制全局CPU消耗的想法。我认为如果将CPU设置为上限,则温度可能会停止急剧上升,并且我愿意牺牲一点性能以完成工作。

  1. 我的推理错了吗?
  2. 如何继续限制总体CPU使用率?

如果有帮助,我正在运行Debian。


我相信你可以的cgroup做到这一点,在这里把这个作为一个指针,而不是一个答案,因为我不知道,我不知道究竟是如何...
derobert

您可以尝试使用cgroups。这里是quesiton有类似的问题:unix.stackexchange.com/questions/14537/...
格热戈日Wierzowiecki

Answers:


10

我不知道将CPU限制到整个系统是可以做到的,而无需进行大量的黑客操作,但是您可以使用cpulimit轻松地限制单个进程使用的CPU 数量

我能想到的唯一有效使用此方法的方法是为您知道是资源消耗的应用程序编写包装器脚本(不能真正称为脚本,它是如此之小)。举例来说,您发现google-chrome使用大量CPU,可以将路径中的google-chrome二进制文件替换为:

#! /bin/bash
cpulimit --limit 70 /usr/bin/google-chrome-bin

我还没有测试过,所以带一点盐。在cpulimit的网站上,您似乎可以为不同应用程序上的cpu限制设置规则。我不确定,您必须看看。


10

尚未提到的另一种选择是cpufrequtils,我已经安装在我的笔记本和Debian 6中使用它可以让你改变算法(州长,在cpufrequtils术语),内核使用缩放时钟速率上下响应要加载-特别是,userspace调速器允许您将频率锁定在您选择的某个位置(当然,CPU必须能够以这种速度运行)。

例如,我用它将Atom锁定在800MHz而不是1.6GHz。它很容易使用。


1
这应该是公认的答案。(或temp_throttle)
Vajk Hermecz 2014年

6

您可以使用脚本temp_throttle根据温度自动限制CPU内核。当您专注于更重要的事情时,它可以在后台运行。有关如何运行的示例:

sudo ./temp_throttle.sh 80 # Will limit CPU cores when 80C is reached.

*免责声明-我是temp_throttle的作者和维护者*


3

进入BIOS并降低CPU的频率。-不需要聪明。


对于不支持欠频的BIOS呢?
daboross

1
使用cgroups,但我还没有见过无法更改频率设置的BIOS。
Sirex

我的(公认制造得很差的)Alienware M14x R1笔记本电脑没有这种设置,除了引导顺序和系统时间外,没有什么可用于更改BIOS的内容。
daboross


1

无需更改调节器,您只需要更改/sys/devices/system/cpu/*/cpufreq/scaling_max_freq每个cpu核心的值即可。

例如,此for循环:

for f in /sys/devices/system/cpu/*/cpufreq/scaling_max_freq; do
    sudo sh -c "echo $1 > $f" 
done

也可以看看 我的setcpu脚本

在此找到原始命令


-2

您可以用来renice按进程或组ID更改进程的优先级。从以下示例中renice

  1. 调整nice值,以使进程ID 987和32的nice值较低:

    renice -n 5 -p 987 32

  2. 如果用户具有适当的特权,请调整好值,以使组ID 324和76具有更高的好值:

    renice -n -4 -g 324 76

  3. 调整nice值,以使数字用户ID 8和sas用户具有较低的nice值: renice -n 4 -u 8 sas


4
答案的唯一说明:renice,nice或其他类似工具不会影响CPU的温度,有问题的进程将继续消耗CPU周期。
Rufo El Magufo 2011年

2
Nice和renice不会限制CPU消耗。他们只是设定优先级。如果没有其他内容同时运行,则进程仍将消耗所有处理能力。
rahmu 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.