dav*_*vid 9 bash download shell-script multithreading
我有一个从另一个应用程序调用的服务。以下是我正在调用的服务 URL -
http://www.betaservice.domain.host.com/web/hasChanged?ver=0
Run Code Online (Sandbox Code Playgroud)
我需要以多线程方式对我上面的服务 URL 进行一些负载测试,而不是一个一个依次调用。
bash shell 脚本有什么办法,我可以通过以多线程方式调用上面的服务 URL 来加载它吗?如果可能的话,我可以让 60-70 个线程非常快地并行调用上面的 URL 吗?
ter*_*don 13
我不会将其称为多线程,但您可以简单地在后台启动 70 个作业:
for i in {1..70}; do
wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0 2>/dev/null &
done
Run Code Online (Sandbox Code Playgroud)
这将导致同时wget运行70 个进程。你也可以做一些更复杂的事情,比如这个小脚本:
#!/usr/bin/env bash
## The time (in minutes) the script will run for. Change 10
## to whatever you want.
end=$(date -d "10 minutes" +%s);
## Run until the desired time has passed.
while [ $(date +%s) -lt "$end" ]; do
## Launch a new wget process if there are
## less than 70 running. This assumes there
## are no other active wget processes.
if [ $(pgrep -c wget) -lt 70 ]; then
wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0 2>/dev/null &
fi
done
Run Code Online (Sandbox Code Playgroud)
小智 9
试试 ab,你也会得到一个很好的统计数据:
ab -n 10000 -c 70 http://www.betaservice.domain.host.com/web/hasChanged?ver=0
Run Code Online (Sandbox Code Playgroud)
此调用将执行 10000 个请求,并发 70 个并行查询。
您可以尝试安装 GNU 并行。您可以从这里获得一些 GNU 并行示例。
测试
我gnu-parallel在我的机器上从源代码安装,我可以让它工作。
你可以从这里从源代码安装它。我有一个红帽系统,所以我下载了Fedora的包,然后跑了.configure,make并make install得到了parallel安装在我的系统。
现在,成功安装后,我创建了一个目录checking并运行以下命令。
seq 10 | parallel -n0 wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,上面的命令为我下载了 10 个网页副本。你可以用 设置你想要的数字seq。
有关如何并行运行相同命令的更多信息,您可以从此处验证 gnu-parallel 提供的示例。从示例页面,
如果要并行运行具有相同参数的相同命令 10 次,您可以执行以下操作:
序列 10 | 并行 -n0 my_command my_args
编辑
现在,为了利用parallel执行,您可以使用命令作为,
seq 70 | parallel -j70 wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0
Run Code Online (Sandbox Code Playgroud)
该-j选项可以根据 CPU 内核总数指定可以并行执行的总作业数。