如何在Ubuntu12.10上限制CPU使用率
来自菜鸟教程
限制 CPU 使用率对于防止服务器崩溃非常重要。
这对于您可能在 crontab 中运行的任何自定义脚本特别有用。
首先,我们将启动一个 Ubuntu 12.10 x64 droplet:
安装 cpulimit
apt-get -y install cpulimit
使用语法
Usage: cpulimit TARGET [OPTIONS...] TARGET must be exactly one of these: -p, --pid=N pid of the process -e, --exe=FILE name of the executable program file -P, --path=PATH absolute path name of the executable program file OPTIONS -b --background run in background -l, --limit=N percentage of cpu allowed from 0 to 100 (mandatory) -v, --verbose show control statistics -z, --lazy exit if there is no suitable target process, or if it dies -h, --help display this help and exit
基准 CPU 使用率
让我们在没有 cpulimit 的情况下测试我们的 CPU 使用率。
以下是如何将 CPU 用于应用程序的示例:
md5sum /dev/zero &
这个 ' 将 md5sum 进程分叉 ' 到后台。 您现在可以使用 top 查看 CPU 使用情况:
如您所见,它消耗了将近 100% of 个 CPU 资源(假设我们在这个 droplet 上有一个 CPU 内核)。
我们可以使用 fg 将这个进程调到前台并使用 CTRL+C 取消它:
使用 cpulimit 限制 CPU 使用率
现在我们可以测试 cpulimit 看看它是否真的做了它应该做的事情。
让我们将 CPU 使用率限制为 40% 并运行相同的命令:
cpulimit -l 40 md5sum /dev/zero &
果然是限制在40%:
多核液滴
在具有多个处理器的 Droplet 上,您需要限制每个进程的 CPU 使用率。
这是一个脚本,它可以无限制地分叉 4 个进程,并让它们在您的服务器上同时运行:
for j in `seq 1 4`; do md5sum /dev/zero & done
每个 CPU 内核使用了近 100% of 个资源:
top - 23:29:28 up 7 days, 13:54, 1 user, load average: 0.80, 1.08, 0.53 Tasks: 77 total, 5 running, 72 sleeping, 0 stopped, 0 zombie %Cpu0 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu1 : 93.2 us, 6.8 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu2 : 95.0 us, 5.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu3 : 98.3 us, 1.7 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 8178228 total, 380196 used, 7798032 free, 28136 buffers KiB Swap: 0 total, 0 used, 0 free, 251708 cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8400 root 20 0 7172 612 520 R 101.7 0.0 0:03.10 md5sum 8401 root 20 0 7172 612 520 R 101.7 0.0 0:03.10 md5sum 8399 root 20 0 7172 616 520 R 98.4 0.0 0:03.06 md5sum 8402 root 20 0 7172 612 520 R 98.4 0.0 0:03.09 md5sum
要对每个进程使用 cpulimit,请将其放在命令的前面:
for j in `seq 1 4`; do cpulimit -l 40 md5sum /dev/zero & done
现在每个进程每个线程最多使用 40% of 个,并且不会使服务器过载:
top - 23:31:03 up 7 days, 13:55, 1 user, load average: 2.68, 1.72, 0.82 Tasks: 81 total, 5 running, 76 sleeping, 0 stopped, 0 zombie %Cpu0 : 39.4 us, 0.7 sy, 0.0 ni, 59.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.3 st %Cpu1 : 38.7 us, 1.7 sy, 0.0 ni, 59.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu2 : 39.4 us, 1.3 sy, 0.0 ni, 59.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu3 : 39.4 us, 1.7 sy, 0.0 ni, 58.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 8178228 total, 380452 used, 7797776 free, 28144 buffers KiB Swap: 0 total, 0 used, 0 free, 251708 cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8442 root 20 0 7172 616 520 R 40.4 0.0 0:06.10 md5sum 8440 root 20 0 7172 612 520 R 40.0 0.0 0:06.09 md5sum 8435 root 20 0 7172 616 520 R 39.7 0.0 0:06.09 md5sum 8436 root 20 0 7172 612 520 R 39.7 0.0 0:06.10 md5sum
你们都完成了!