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と包囲なしで運をチェックしています)。
ありがとうございます!
厳密に指定されたタイムスタンプのみでリクエストを送信することは必須ですか、基本的には、2つのリクエストが同じソケットに接続されないようにするために十分な時間を100kリクエストで確保することです。 – Pras
ソフトウェア推奨スタックオーバーフローに関するトピック外です。しかし、あなたは多分crondやそれに類するものを使うものを書くことができます。あなたはファイルをcrontabに変換するプログラムを書くことができます(しかし、crontabがマイクロタイムを許しているかどうかわかりませんが、おそらくいくつかのアドオンを使って)。 – simbabque
はい、指定されたタイムスタンプで要求を送信することは必須です。私たちの顧客は、タイムスタンプとポストリクエストでリストを配信します。このリストは、1日のリクエスト数を再現するように設計されています。勤務時間中にたくさんのご要望があります。夜間にはリクエストが多少あります。 – MPH