GNU Parallel 可以每秒执行 bash 脚本 25000 次并并行处理吗?

GNU Parallel 可以每秒执行 bash 脚本 25000 次并并行处理吗?

我正在测试我的网络服务器响应。我有一台 15 个 CPU 和 30 GB 内存的计算机。如何在这台计算机上每秒执行以下 bash 命令 25000 次?

 curl -Z url="mywebserver.com" --data "{JSON DATA}"

我执行了以下更糟糕的操作,每秒执行 shell 200 次。

 seq 25000 | parallel -j0 myshell

答案1

运行单个 GNU 并行作业的 CPU 开销约为 1-10 毫秒。这部分是因为是用 Perl 编写的,但主要是因为在幕后进行了大量的安全测试。

因此,如果您想使用 GNU Parallel 平均每秒运行 25000 个作业,您可以这样做:

seq 1000000 | parallel -n100 --pipe --round-robin -I ,, parallel myjob {}

您将需要大约 250 个核心才能做到这一点。

(当您parallel从外部调用时parallel,您会遇到这样的情况:哪个parallel应该替换替换字符串?通过在外部使用-I dummyor ,您可以像您习惯的那样在内部使用。)-I ,,parallel{}parallel

TL;DR:GNU Parallel 不适用于运行时间很重要的非常短的作业。

xargs安全测试很少,可能适合这里:

myjob() {
  curl -Z url="mywebserver.com" --data "{JSON DATA}"
}
export -f myjob
seq 25000 | parallel --pipe --block 100 --roundrobin xargs -n1 -P0 bash -c myjob >/dev/null

在我的 48 核服务器上,运行时间为 2.6 秒。因此仍未达到要求的 1 秒。

相关内容