我最近在我的戴尔机器上安装了 Scientific linux 7(64 位),它有 2 个核心(即 2 个逻辑 CPU)。我有一段时间没有打开计算机来清洁风扇、冷却器等,并且当在任一(或两个)核心上使用高(例如 100%)CPU 几分钟时,计算机会关闭(通常当新人损坏显示图形或加载 PDF 文档火狐浏览器或终端上任何长时间运行的命令,例如制作)。
在清理系统之前,我想将 CPU 使用率限制为每个核心的 75 或 80% 左右(不是每个进程!)所以我不会遇到意外的关闭。这样,进程仍然可以利用多个 CPU,但不会将其中任何一个超出 CPU 使用率百分比限制。有什么方法可以做到这一点吗?
答案1
经过几天的深入研究,我发现了两种降低CPU使用率的方法对于流程。一般来说,如果你想降低整个机器的CPU使用率,可能有一些程序使用最持久的CPU,你应该限制那些而不是给整个机器带来负担。如果您这样做是为了节省电池寿命,那么您可能还想控制硬件的电源使用,例如调谐或者动力顶,大多数发行版都有工具可以帮助您做到这一点。
- 停止/继续信号
自 UNIX 以来,信号就已存在。您向进程发送 SIGSTOP 或 SIGTSTP(区别在于前者可能会导致进程崩溃,如果它必须进行清理工作,进程不会被迫在后者停止,请使用适合您的进程的进程)来暂停它(释放 CPU 并可能降低温度)。然后向进程发送 SIGCONT 以恢复它,占用 CPU。此方法将在 cpu 图表上产生一系列“尖峰”,并阻止处理器过热,因为您没有通过暂停进程为其提供足够的时间。
这种方法的结果是这些暂停不会光滑的,这意味着视频播放甚至网页浏览也不会流畅,因此您可能需要将此方法与 shell 命令一起使用(多进程程序或像 Google Chrome 或 make 这样的命令也不能很好地使用此方法)。显然,这是不是建议暂停/恢复系统进程,例如 systemd。
虽然您可以手动执行此操作,CPU限制是一个使用此方法的不错的小程序(它使用 SIGSTOP/SIGCONT)。与描述相反,即使您有多个核心,您指定的 cpu % 也在 0 到 100 之间。您始终可以使用 Ctrl-Z 在终端中暂停作业。
- 中央处理器功率(强烈推荐)
这个是在 Linux 内核中构建的,所以大多数发行版都应该提供它(获取它这里如果你没有的话)。这个命令行实用程序管理 CPU 频率,因此它几乎可以使用以下命令控制整个 cpu州长州(例如,性能、省电等),它还可以做其他事情。与暂停/恢复方法不同,进程是很多有了这个就更顺畅了。您需要设置处理器的最大频率。
- 运行
cpupower frequency-info
以查看可用的处理器状态。 - 以 root 身份输入
cpupower frequency-set -u <frequency>
,从您拥有的最低频率开始,然后尝试找到不会过热的最高频率。 - (这是可选的)如果需要,您可以安装 lm_sensors 软件包,它可以让您查看系统温度。然后运行
sensors-detect
并对所有问题回答“是”。最后,运行sensors
以查看当前温度和临界温度(超过该温度系统会过热)。
此时当前的温度应该低得多。请注意,尽管某些性能密集型程序(例如游戏)在键入上述命令后可能会挂起,但如果您收到包含该消息的弹出窗口,则应该等待程序而不是强制退出。请注意,每次系统重新启动时您都必须键入此命令(除非您可以让它自动运行)。看这和这有关 cpupower 的更多信息。