web-dev-qa-db-ja.com

Tomcatのパフォーマンスチューニング

Tomcat 7のパフォーマンスを調整しています。サーバーには、24コアと32 GBのメモリが搭載されています。テストインターフェイスは、プロセスなしのRESTfulサービス(すぐに応答)であり、server.xmlの構成は次のとおりです...

<Connector port="8088" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           enableLookups="false"
           compression="off"
           maxConnections="8192"
           maxThreads="1000"
           tcpNoDelay="true"/>

およびJVM構成...

-Xms8192M -Xmx16384M.

JMeterのホストは、上記のサーバーと同じ仕様の別のコンピューターです。そして、JMeterヒープの構成は-Xms12218m -Xmx24426m

私のJMeterテスト計画では、240個のリクエストがRESTfulインターフェイスに一度に同時に送信されますが、最初の100の平均応答時間は50ミリ秒以下ですが、次の100では1秒、次の100では3秒に増加します。残りのために。

そのような現象に興味がありますが、構成に間違いや提案はありますか?

前もって感謝します。

8
JiaMing Lin

あなたは設定することができます:

acceptCount="2048"

そして

maxConnections="1024"

MaxConnectionsはmaxThreadsと関係があり、maxThreadsをビジネスとCPUのコア番号(8Xや16Xなど)に一致するように構成する必要があります。 acceptCountは、待機中の接続番号です。

MaxConnectionsとmaxThreadsは、サーバーハードウェアのパフォーマンスとともに、大きくならないほど良いわけではないことに注意してください。

7
TiemaoCSDN

サーバーが処理する必要のある要求が多いほど、各要求の処理にかかる時間が長くなります。これは正常な動作です。

スレッドを同時にどのように開始していますか?ランプ時間= 0または1?

大量のスレッドを起動し始めると、クライアントはリクエストを行うのに時間がかかり、サーバーは応答するのに時間がかかります。

起動時に、サーバーはしきい値に達するまで他に何もすることがないため、すべての要求に非常に迅速に応答できます。これらの各リクエストはすぐに終了し、同じスレッドが別のリクエストを送信します。その間、サーバーは前のスレッドの波に応答し、さらに多くのスレッドがキューに入れられます。これで、要求に応答しながらキューを管理する必要があるため、別のしきい値が満たされます。

基本的に、一連のスレッドを開始してリクエストを同時に起動することは、いくつかの場合を除いて、サーバーのあまり現実的なユースケースではありません。関連性がある場合は、この動作を期待できます。

1
CharlieS