如何从bash shell脚本中并行调用服务URL?


8

我有从其他应用程序调用的服务。以下是我正在呼叫的服务网址-

http://www.betaservice.domain.host.com/web/hasChanged?ver=0

我需要以多线程方式对我上面的服务URL进行一些负载测试,而不是一个个地依次调用。

bash shell脚本有什么办法,我可以通过多线程方式对其进行调用,从而对上述服务URL造成负担?如果可以的话,我可以有60-70个线程在上述URL上并行快速调用?

Answers:


13

我不会将其称为多线程,但您可以在后台简单地启动70个作业:

for i in {1..70}; do 
   wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0 2>/dev/null &
done

这将导致70个wget进程同时运行。您还可以执行一些更复杂的操作,例如以下小脚本:

#!/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

谢谢。我现在知道了,所以我可以增加70的值吧?是否可以持续进行此负载测试10-15分钟?
大卫

@ user2809564查看更新的答案。
terdon

当然,感谢您的编辑。当我运行上述脚本时,出现错误消息pgrep: invalid option -- 'c'。我不确定为什么,您能想到什么原因吗?
大卫

@ user2809564您可能有不同的pgrep实现。这是Linux吗?哪一个?无论如何,您可以将该行更改为if [ $(pgrep wget | wc -l) -lt 70 ]; then
terdon

9

试试ab,您也会得到一个不错的统计数据:

ab -n 10000 -c 70 http://www.betaservice.domain.host.com/web/hasChanged?ver=0

该调用将执行10000个请求,并发70个并行查询。


如何安装apache bench Red Hat Enterprise Linux Server release 6.3
大卫

1
yum install httpd-tools,根据serverfault.com/a/363775/10989
RJHunter 2014年

5

您可以尝试并行安装GNU。您可以从此处获得一些GNU并行示例。

测试中

gnu-parallel从源代码安装在机器上,可以正常工作。

您可以从此处从源代码安装它。我有一个红帽系统,所以我下载了Fedora的包,然后跑了.configuremakemake install得到了parallel安装在我的系统。

现在,在成功安装之后,我创建了一个目录checking并运行以下命令。

seq 10 | parallel -n0  wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0

不出所料,上述命令为我下载了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

-j选项可以根据总CPU内核数指定可以并行执行的总作业数。


谢谢拉梅什。这种方法将调用我的服务多少次?
大卫

@ user2809564,请参阅更新。
Ramesh 2014年

凉。这是否还可以持续进行10-15分钟的负载测试?
大卫

我认为该示例将提供更多见解。stackoverflow.com/a/7627103/1742825
Ramesh 2014年

@ user2809564,请在我得到建议使用的地方也参考此问题GNU parallelunix.stackexchange.com/questions/114962/…–
Ramesh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.