2017-05-29 24 views
0

我必須通過每天100k Post-Requests列表來壓力測試服務器。每個請求必須以給定的固定時間戳開始。兩個請求之間最小的時間差約爲100ms。Stresstest服務器:在給定的亞秒時間戳上啓動請求

例子:

12:08:38.971 url1 
12:08:39.429 url2 
12:08:40.186 url3 
12:08:40.444 url4 
... 

我會用perl或c實現stresstest。請求使用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基準,httperf和圍困沒有運氣)?

在此先感謝!

+0

僅在嚴格給定的時間戳發送請求是強制性的,還是基本上要強調服務器有100k個請求,在兩個連續請求之間保持足夠的時間以確保兩個請求不會以相同的套接字結束 – Pras

+0

不幸的是,在Stack Overflow上是無關緊要的。然而,你也許可以寫一些使用crond或類似的東西。你可以編寫一個程序將你的文件轉換成一個crontab(儘管我不確定crontab是否允許microtimes,也許有一些插件)。 – simbabque

+0

是的,必須在給定的時間戳發送請求。我們的客戶提供時間戳和請求後的列表。該列表旨在重現當天的請求數量。很多工作時間的要求 - 只有在晚上的一些要求。 – MPH

回答

0

在發送每個請求之前,您可以通過設置適當的延遲時間來編寫壓力客戶端。 請注意,模擬壓力測試發送請求的計算對於網絡延遲,可用的系統資源(cpu,內存),客戶端和服務器程序運行時的優先級是主觀的。

你有100k被髮送超過24小時(假設你的意思是一天24小時),所以基本上你需要保持兩個連續的請求發送之間的延遲1158毫秒。 您需要通過在收到迴應後從時間戳發送請求之前減去循環中的每個請求所需的時間 可以說,如果要求處理請求需要x毫秒,如果x小於1158毫秒, (1158-x)毫秒,然後再發送下一個請求。

當您使用多個進程或線程運行它時,需要在計算中考慮這一點,因爲每個線程/進程應在24小時內發送100k/n個請求,其中n是線程或進程的數量。

相關問題