gpt4 book ai didi

c - 压测服务器: starting requests at given subsecond timestamps

转载 作者:行者123 更新时间:2023-11-30 16:45:03 24 4
gpt4 key购买 nike

我必须通过每天 10 万个后请求列表对服务器进行压力测试。每个请求必须从给定的固定时间戳开始。两个请求之间的最小时间差约为 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 和 siege,但没有运气)?

提前致谢!

最佳答案

您可以通过在发送每个请求之前设置适当的添加延迟来对压力客户端进行编码。请注意,发送模拟压力测试请求的计算受网络延迟、可用系统资源(CPU、内存)、客户端和服务器程序运行时的优先级的影响。

您需要在 24 小时内发送 100k 数据(假设您的意思是一天 24 小时),因此基本上您需要在发送的两个连续请求之间保持 1158 毫秒的延迟。您需要通过从收到响应后的时间戳减去发送请求之前的时间戳来计算循环中每个请求所花费的时间假设处理一个请求需要 x 毫秒,如果 x 小于 1158 毫秒,则在发送下一个请求之前休眠 (1158 - x) 毫秒,否则只需延迟发送下一个请求。

当您使用多个进程或线程运行它时,您需要在计算中考虑到这一点,因为每个线程/进程应该在 24 小时内发送 100k/n 个请求,其中 n 是线程或进程的数量。

关于c - 压测服务器: starting requests at given subsecond timestamps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44244419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com