【问题标题】:Stresstest server: starting requests at given subsecond timestamps压力测试服务器:在给定的亚秒时间戳开始请求
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    相关资源
    最近更新 更多