我有一个包含许多 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 时间并降低速度。与 不同cpulimit
,nice
如果没有其他进程想要使用 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%。