質問

Webアプリケーションの実行速度が非常に遅く、時々ハングすることがあります。これは、レポートおよび編集機能を備えた学校関連のWicketアプリであり、自動化されたクライアントがHTTPS経由でデータを取得/投稿するために使用するサーブレットです。

多くの編集/アップロード/ダウンロードが行われている忙しい時間帯に、アプリの動作が遅くなり、応答しなくなります。 Wicket" PageMap still依然としてロックされています"エラー。 Tomcatはずっと動き続けているようです。メモリ使用量は管理可能で、約50Mです。

YourKitを設定してプロファイリング情報を取得しましたが、忙しい時期にTomcat CPU時間の81%がここで費やされていることがわかりました:

org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run()
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(Object[])
org.apache.jk.common.ChannelSocket.processConnection(MsgContext)
org.apache.jk.common.ChannelSocket.receive(Msg, MsgContext)
org.apache.jk.common.ChannelSocket.read(MsgContext, byte[], int, int)
java.io.BufferedInputStream.read(byte[], int, int)
java.io.BufferedInputStream.read1(byte[], int, int)
java.io.BufferedInputStream.fill()
java.net.SocketInputStream.read(byte[], int, int)
[Wall Time]  java.net.SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int)

このアプリでは、SSL経由で30秒ごとに更新を要求する約250のクライアントがサーバーをポーリングしています。ほとんどの場合、これはすぐに空の応答を返します。時折、DBアクティビティが急増し、大量のデータ(数MB)がクライアントに送り返されることがあります。

では、この81%のアクティビティは何ですか?本当に遅い接続を持つ少数のクライアントは、Tomcatスレッドがリクエストボディを受信するのを待機させることで、そのスレッドを滞らせますか?

誰もがこのようなものを見ましたか、これをテスト/トラブルシューティング/修正する方法についてアドバイスがありますか?

役に立ちましたか?

解決

テスト環境を設定し、負荷テストでこれを再現してください。
そうすれば、原因を特定できます。そうでなければ、要素が多すぎます。
また、この方法により、製品環境を危険にさらすことなく修正を試すことができます。

他のヒント

おそらくメモリ使用量が原因です。
javaプロセスのメモリ使用量を確認して、どれだけの量が得られているかを確認する必要があります。
十分になっていない場合は、Tomcat用に設定されている場所にXmx jvmパラメーターを設定する必要があります。

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