ロードテストJava Webアプリケーション - TPS / AVGトランザクション応答時間を見つける

StackOverflow https://stackoverflow.com/questions/2675210

  •  28-09-2019
  •  | 
  •  

質問

開発サイクル全体で構築しているWebアプリケーションをロードすることができることを目指して、Javaで独自の負荷テストツールを構築したいと思います。 WebアプリケーションはサーバーへのサーバーへのHTTP投稿リクエストを受信し、Avgerage Response時間とともに、秒あたりの開始トランザクション(TPS)容量を見つけたいと思います。

POSTリクエストと応答のメッセージはXMLで行われます(私はそれが本当に適用可能だとは思わない:))。

トランザクションを送信し、1秒(1000ミリ秒)で送信できるトランザクションの数を数えるための非常にシンプルなJavaアプリを作成しましたが、これがロードテストの最良の方法ではないと思います。本当に私が望んでいるのは、まったく同じ時間に任意の数のトランザクションを送信することです - すなわち10、50、100など。

どんな助けも感謝します!

ああ、これが私の現在のテストアプリコードです:

    Thread[] t = new Thread[1];

    for (int a = 0; a < t.length; a++) {
        t[a] = new Thread(new MessageLoop());
    }
    startTime = System.currentTimeMillis();
    System.out.println(startTime);
    for (int a = 0; a < t.length; a++) {
        t[a].start();
    }
    while ((System.currentTimeMillis() - startTime) < 1000 ) {

    }

    if ((System.currentTimeMillis() - startTime) > 1000 ) {
        for (int a = 0; a < t.length; a++) {
            t[a].interrupt();
        }
    }
    long endTime = System.currentTimeMillis();
    System.out.println(endTime);
    System.out.println("Total time: " + (endTime - startTime));
    System.out.println("Total transactions: " + count);

private static class MessageLoop implements Runnable {
    public void run() {
        try {
            //Test Number of transactions

            while ((System.currentTimeMillis() - startTime) < 1000 ) {
                // SEND TRANSACTION HERE
                count++;
            }
        }
        catch (Exception e) {

        }
    }
}
役に立ちましたか?

解決

コードにはいくつかの問題があります。使用するのは悪い選択です System.currentTimeMillis() 持っているシステムタイマーを使用するとき 精度 1ミリ秒の、しかし 正確さ 約10〜20ミリ秒。使用する必要があります System.nanoTime() この測定の場合。また、ロードテストツールは、マルチスレッド環境でコードをテストできるはずです。

したがって、使用する必要があります オープンソースツール :)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top