我不得不通过每天10万次的Post请求列表来测试服务器的压力。每个请求必须在给定的固定时间戳开始。两个请求之间的最小时差约为100ms。
示例:
12:08:38.971 url1
12:08:39.429 url2
12:08:40.186 url3
12:08:40.444 url4
...我将使用perl或c来实现压力测试。请求使用curl执行,使用线程,因为响应通常长于100ms。
我的问题是填充某种类型的队列,该队列在列表中给定的固定时间启动请求。
我的第一个想法是使用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 benchmark,httperf和siege,但没有运气)?
提前感谢!
发布于 2017-05-29 23:18:19
您可以通过在发送每个请求之前设置适当的延迟来编写您的压力客户端。请注意,为发送模拟压力测试的请求所做的计算取决于网络延迟、可用的系统资源(cpu、内存)、客户端和服务器程序运行时的优先级。
你有100k要在24小时内发送(假设你的意思是一天24小时),所以基本上你需要在两个连续发送的请求之间保持1158毫秒的延迟。你需要计算循环中的每个请求所花费的时间,方法是在发送请求之前从接收到响应后所用的时间戳中减去时间戳。假设处理一个请求需要x毫秒,如果x小于1158毫秒,那么在发送下一个请求之前休眠(1158 - x)毫秒,否则只发送下一个延迟的请求。
当你用多个进程或线程运行它时,你需要在计算中考虑这个因素,因为每个线程/进程应该在24小时内发送100k/n数量的请求,其中n是线程或进程的数量。
https://stackoverflow.com/questions/44244419
复制相似问题