我必须通过每天100k的请求后列表对服务器进行压力测试。每个请求必须从给定的固定时间戳开始。两个请求之间的最小时间差大约为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和没有运气的攻击)?
提前致谢!
答案 0 :(得分:0)
您可以通过在发送每个请求之前设置适当的延迟来对压力客户端进行编码。 请注意,发送模拟压力测试请求的计算主要是网络延迟,可用的系统资源(cpu,内存),客户端和服务器程序运行时的优先级。
你有超过24小时发送的100k(假设你的意思是一天24小时),所以基本上你需要在发送的两个连续请求之间保持1158毫秒的延迟。 您需要通过从接收响应之后的时间戳发送请求之前减去时间戳来计算循环中每个请求所花费的时间 可以说,如果x小于1158毫秒,则需要x毫秒才能获得处理,在发送下一个请求之前休眠(1158 - x)毫秒,否则只需发送任何延迟的下一个请求。
当您使用多个进程或线程运行它时,您需要在计算中考虑因为每个线程/进程应该在24小时内发送100k / n个请求数,其中n是线程数或进程数。