具有卷曲的bash循环证明响应时间的非线性缩放

时间:2015-03-05 20:12:20

标签: performance bash curl performance-testing

我编写了这个简单的Bash脚本来检测错误页面的发生率:

date; 
iterations=10000; 
count_error=0; 
count_expected=0; 
for ((counter = 0; counter < iterations; ++counter)); do 
  if curl -s http://www.example.com/example/path | grep -iq error; 
  then 
    ((count_error++)); 
  else 
    ((count_expected++)); 
  fi; 
sleep 0.1; 
done; 
date;
echo count_error=$count_error count_expected=$count_expected

我发现总执行时间不随迭代计数线性扩展。 10次​​迭代00:00:12,100:00:01:46,1000在00:17:24,10000在~50分钟,100000在~10小时

任何人都可以提供有关脚本的非线性和/或改进的见解吗?卷曲无法以10 /秒的速度发出请求吗? GC是否必须定期清除填充响应文本的内部缓冲区?

1 个答案:

答案 0 :(得分:1)

以下是一些想法:

  • 您在这里不是每秒创建10个请求(正如您在问题中所述),而是按顺序运行请求,即每秒尽可能多的请求。
  • Bash中不需要每行末尾的;
  • 当我的机器上的脚本针对不同的URL进行测试时,10次迭代需要3秒,100次需要31秒,1000次需要323秒,因此执行时间会在此范围内线性缩放。
  • 您可以尝试使用htoptop来识别客户端或服务器上的性能瓶颈。
  • apache基准测试工具ab是用于对Web服务器进行基准测试的标准工具,可用于大多数发行版。有关详细信息,请参阅管理页面ab(1)