+ -
当前位置:首页 → 问答吧 → Shell 作业控制(ab压力测试问题)

Shell 作业控制(ab压力测试问题)

时间:2011-05-23

来源:互联网

要用ab做个模拟压力测试,脚本很小,如下:
  1. #!/bin/sh
  2. #set -x
  3. concus=( 100 1000 2000 3000 4000 50000 60000 7000 80000 9000 10000 )
  4. #echo ${concu[@]};

  5. for concu in "${concus[@]}"
  6. do
  7.     (/usr/sbin/ab -n 10000 -c $concu http://10.10.19.102/abs/index.html >> /var/webdata)& #1
  8.     wait

  9.     (/usr/sbin/ab -n 10000 -c $concu http://10.10.191.103/abs/index.html >> /var/webdata)& #2
  10.     wait
  11. done
复制代码
想控制作业流程,让循环体内第1个后台作业执行完毕再执行第2个后台作业。现在出现的问题是好像没按照我的想法
    执行,一段时间后报错:socket: Too many open files(24). 我估计是好几个后台作业一起执行造成的结果。
    请问有什么办法解决这个问题?参考些什么资料? ABS 上没知道很好的解决办法,谢谢了。

作者: shellyxz   发布时间: 2011-05-23

第一个方法,别加后台符……
第二个方法,加了后台符的话,判断该进程执行完毕,再执行下一个

作者: dzhxc   发布时间: 2011-05-23

socket: Too many open files (24)

解决办法:

su – root

ulimit -n 65535(要改的数)

PS:这应该不难理解,linux是通过文件来对设备进行管理

ulimit -n是设置同时打开文件的最大数值,ab中每一个连接打开一个设备文件,所以设置这个值就可以解决。

作者: xiaopan3322   发布时间: 2011-05-23



QUOTE:
第一个方法,别加后台符……
第二个方法,加了后台符的话,判断该进程执行完毕,再执行下一个
dzhxc 发表于 2011-05-23 14:29




    楼主的写法没有错,你这样写反而满足不了楼主的需求了,他说的是另外一个问题……

作者: xiaopan3322   发布时间: 2011-05-23



QUOTE:
楼主的写法没有错,你这样写反而满足不了楼主的需求了,他说的是另外一个问题……
xiaopan3322 发表于 2011-05-23 14:31




    哦,要是ulimit都没有开到65535的话,那就没啥好说的了

作者: dzhxc   发布时间: 2011-05-23

本帖最后由 shellyxz 于 2011-05-23 14:43 编辑

回复 xiaopan3322


    额,昨天晚上在虚拟机上测试的,也修改了这值,今天换到gentoo下就忘了。。。。。。
    先谢谢了

作者: shellyxz   发布时间: 2011-05-23

回复 dzhxc


    & 符号是必需的,要不然wait就没啥用了。。。
    谢谢指教

作者: shellyxz   发布时间: 2011-05-23

ab本来就是并发的吧?顺序执行就可以了吧?

作者: waker   发布时间: 2011-05-23