我正在测试我的网络服务器响应。我有一台 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 dummy
or ,您可以像您习惯的那样在内部使用。)-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 秒。