使用cpulimit

使用cpulimit

我有一个包含许多 jar 文件的 .sh 脚本。每个 jar 文件都有唯一的启动参数。我必须限制所有 jar 文件,使其每个文件使用的 CPU 不超过 %5。

nohup java -a dsasda -p adss
nohup java -a dsasad -p adds
nohup java -a dsdasa -p adsa
nohup java -a dsdsa -p adds
nohup java -a ddassa -p adas

我一直在阅读有关 cpulimit 工具的信息,如何使用它来定位单个 jar?

答案1

使用cpulimit

我将使用您建议的工具;cpulimit绝对可以做您想做的事。 nohup cpulimit --background --limit=5 -- java -a dsasda -p adss

请记住,5% 是单 CPU 核心,而不是机器总计算能力的一半。如果您想使用多核机器的 5%,请将其扩大。

您可能还希望将--quiet参数传递给 cpulimit。

如果您不想特别将该过程限制为 5%,而只是想防止 Java 拖慢您的机器,请考虑使用nice

使用nice

nice将降低 Java 进程的优先级,这样它们就不会占用所有的 CPU 时间并降低速度。与 不同cpulimitnice如果没有其他进程想要使用 CPU,将允许 Java 进程使用超过 5% 的 CPU。

nohup nice java -a dsasda -p adss

nice接受一个可选参数,--adjustment=N其中 N 是一个整数,范围从 19(极低优先级)到 0(正常)甚至 -20(极高优先级,但仅在您是 root 时可用)。默认为 10,这可能没问题。

答案2

您可以按照建议使用 cpulimit,通过指定要限制的进程的 PID 来确定限制,因此您可以使用以下脚本生成并将上述每个任务限制为 CPU 的 5%:

#!/bin/sh
nohup java -a dsasda -p adss &
nohup cpulimit -p $! -l 5 >/dev/null &
nohup java -a dsasad -p adds &
nohup cpulimit -p $! -l 5 >/dev/null &
nohup java -a dsdasa -p adsa &
nohup cpulimit -p $! -l 5 >/dev/null &
nohup java -a dsdsa -p adds &
nohup cpulimit -p $! -l 5 >/dev/null &
nohup java -a ddassa -p adas &
nohup cpulimit -p $! -l 5 >/dev/null &

请注意,这$!意味着 shell 生成的最后一个进程的 PID(在本例中是上一行中的 java 命令)。这-l 5意味着限制为 5%。

相关内容