2017-05-29 2 views
0

1日あたり100kのポストリクエストのリストを介してサーバーをストレステストする必要があります。各要求は、一定の固定タイムスタンプで開始する必要があります。 2つの要求の間の最小の時間差は約100msです。Stresstestサーバー:指定されたサブ秒のタイムスタンプで要求を開始

例:

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

私はstresstestを実装するためにPerlやCを使用します。要求はカールで実行され、応答は通常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

厳密に指定されたタイムスタンプのみでリクエストを送信することは必須ですか、基本的には、2つのリクエストが同じソケットに接続されないようにするために十分な時間を100kリクエストで確保することです。 – Pras

+0

ソフトウェア推奨スタックオーバーフローに関するトピック外です。しかし、あなたは多分crondやそれに類するものを使うものを書くことができます。あなたはファイルをcrontabに変換するプログラムを書くことができます(しかし、crontabがマイクロタイムを許しているかどうかわかりませんが、おそらくいくつかのアドオンを使って)。 – simbabque

+0

はい、指定されたタイムスタンプで要求を送信することは必須です。私たちの顧客は、タイムスタンプとポストリクエストでリストを配信します。このリストは、1日のリクエスト数を再現するように設計されています。勤務時間中にたくさんのご要望があります。夜間にはリクエストが多少あります。 – MPH

答えて

0

ストレスクライアントをコーディングするには、各リクエストを送信する前に適切な遅延を設定します。 ストレステストをエミュレートする要求送信の計算は、ネットワーク遅延、使用可能なシステムリソース(CPU、メモリ)、実行中のクライアントプログラムとサーバープログラムの優先順位に依存します。

あなたは24時間(1日24時間を意味すると仮定して)送信されるので、基本的に、2つの連続した要求が送信される間に1158ミリ秒の遅延を保つ必要があります。 応答の受信後に取得されたタイムスタンプから要求を送信する前にタイムスタンプを減算することで、ループ内の各要求に要した時間を計算する必要があります。 xが1158msec未満であれば、reqeustが処理されるのにxmsec次の要求を送信する前に(1158 - x)ミリ秒、それ以外の場合は遅れて次の要求を送信してください。

複数のプロセスまたはスレッドで実行する場合、各スレッド/プロセスは、スレッドまたはプロセスの数がnである24時間以内に100k/n個の要求を送信することになるため、計算で考慮する必要があります。

関連する問題