【发布时间】:2017-05-29 14:04:08
【问题描述】:
我必须通过每天 10 万个 Post-Request 的列表对服务器进行压力测试。每个请求必须从给定的固定时间戳开始。两个请求之间的最小时间差约为 100 毫秒。
例子:
12:08:38.971 url1
12:08:39.429 url2
12:08:40.186 url3
12:08:40.444 url4
...
我将使用 perl 或 c 来实现压力测试。使用 curl 执行请求,使用线程,因为响应通常超过 100 毫秒。
我的问题是填充某种队列,该队列在给定的固定时间从列表中启动请求。
我的第一个想法是使用 while 循环(单个请求的示例)并永久检查时间戳:
#include <stdio.h>
#include <sys/time.h>
struct timeval time;
int t_sec=1496064929;
int t_usec=100;
int request_started=0;
int main(){
while(1){
gettimeofday(&time, NULL);
if(time.tv_sec == t_sec && time.tv_usec > t_usec && request_started == 0){
printf("Request start at %d %d\n", time.tv_sec, time.tv_usec);
request_started=1;
}
}
}
但这段代码远非理想... 是否有某种调度程序库可以处理亚秒区域的请求?或者,有准备好使用可以从给定列表中产生此类请求的基准工具(我已经检查了 apache 基准,httperf 和围攻没有运气)?
提前致谢!
【问题讨论】:
-
是否必须严格按照给定的时间戳发送请求,或者您基本上想强调一个有 100k 请求的服务器在两个连续请求之间保持足够的时间,以确保两个请求最终不会相同插座
-
不幸的是,软件推荐在 Stack Overflow 上是题外话。但是,您也许可以编写一些使用 crond 或类似的东西。您可以编写一个程序将您的文件转换为 crontab(虽然我不确定 crontab 是否允许 microtimes,也许有一些插件)。
-
是的,必须以给定的时间戳发送请求。我们的客户提供带有时间戳和后请求的列表。该列表旨在重现一天中的请求数量。工作时间有很多请求 - 只有晚上有一些请求。
-
crond 的最小时间间隔是一分钟。 frequent-cron 允许毫秒 - 但仅限于固定间隔。
-
填写 simbabque 可能的想法:在编写自己的工具之前,我会使用 ab 或其他现有工具。对于您自己的代码,您是唯一的编码员、调试员和测试员。
标签: c perl curl scheduler stress-testing