我有一台 Intel 服务器。使用 p_state 驱动程序,CPU 在 800MHz 和 3GHz 之间进行电源管理。显然,当 CPU 频率降至 800Mhz 时,功耗更低,噪音更小。
服务器上运行的大多数程序都是按需运行的,应该尽可能快地执行(它们确实如此),但我有一个守护进程完全不重要。它在峰值时占用大约 20% 的 CPU,但在处理文件时可以持续几个小时。
我的问题是,每当此进程执行任何操作时,CPU 中的电源状态都会上升。它会消耗更多电量并产生更多噪音。我希望这个守护进程始终以 800MHz 运行(除非其他任务需要 CPU)。
我可以将整个服务器置于省电模式,但我需要其他应用程序来扩展 CPU。有没有一种合理的方法可以让我告诉管理 CPU 的程序忽略特定应用程序的负载?
答案1
我发现cpulimit
。
$ sudo apt-get install cpulimit # for installing cpulimit
$ pgrep process_to_limit # getting the pid
1234
$ cpulimit -p 1234 -l 30 # -p pid -l percentage_of_cpu_to_use
但它似乎cpulimit
只使用正在运行的进程的 pid 或执行程序。这意味着您需要找到一种方法(bash 脚本)在守护进程运行时执行 cpulimit。
这是一个简短的 shell 脚本,它读取 pid、执行 cpulimit 并休眠 60 分钟。
#!/bin/sh
# This example uses firefox, replace the variable PROG
PROG=firefox
PID=`pgrep $PROG`
if [ $PID ] # if $PID not equals 0 (zero)
then
cpulimit -p $PID -l 30 # limit the cpu time to 30%
sleep 60m # wait 60 minutes
else
sleep 60m
fi
将其保存为例如run_cpulimit.sh
,授予权限chmod u+x run_cpulimit.sh
并启动它。