1

Play 1.2.5 アプリケーションを入手しましたが、アプリケーションが応答しなくなるという問題がいくつかありました。

アプリケーションに適切なメモリ設定を設定した後、問題は再発していません (数日間の ATM) が、実際の理由と、ログでそれを確認する方法があるかどうかを知りたいです。

私たちのセットアップでは、

  • AWS で実行されている Play 1.2.5 アプリケーション (Ubuntu 12.04)
  • MySQL RDS データベース
  • プロキシとして動作する Apache サーバー (SSL の処理など)。

これはさまざまな呼び出しで発生しましたが、単純なrenderText実装 (ちょうど 200 & "OK")でヘルスチェックを監視する例があります。私たちはこれらを「時々」持っています。アプリケーションは、起動せずに応答を返しました。

Apache アクセス ログには次のものがありました。

  (IP addr) - - [01/Mar/2013:09:31:16 +0200] "GET /monitor/healthcheck HTTP/1.1" 502 4305 "-" "NING/1.0"

Apache エラー ログには次のものがありました。

  [Fri Mar 01 09:36:16 2013] [error] [client (IP addr)] (70007)The timeout specified has expired: proxy: error reading status line from remote server localhost:8080
  [Fri Mar 01 09:36:16 2013] [error] [client (IP addr)] proxy: Error reading from remote server returned by /monitor/healthcheck

(Apache は 300 秒 = 5m のプロキシ タイムアウト長)

再生ログには何もありません (コントローラーでリクエスト URL のログを取得したため、少なくともリクエストがそこまで到達していないか、ログに問題がありました)

最初に考えられるのは、スレッドが不足していることです。次の理由から、これは私にはほとんどありそうにないようです。

  • 開発中 -> トラフィックがかなり少ない
    • これは、ログに数時間前のトラフィックがない場合にも発生します。
  • 10 個のスレッドを取得しました ( play.pool=10)
  • 非同期の WS 呼び出しは使用していません (Play 1.2.X では多少バグがあるようです)。
  • 通話が長時間ブロックされない
  • さまざまな使用後のランダムなテストでは、スレッドがハングしていないようです (jstack で調べたところ、すべてが ~OK のようです)。

(関連しているかもしれませんが、関連していないかもしれません): ある時、jstack をチェックして、cacll に応答しないようにしました。

$ jstack 7842
7842: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding

ただし、-F を試す前に再試行したところ、適切な応答が得られたので、JVM が応答しない状態にあったとしても、すぐに正常になりました。

いくつかの助けを借りて、適切なメモリ設定をセットアップし、それ以来 (2013 年 3 月 1 日の金曜日)、この問題は発生していません。

jvm.memory=-Xms64m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m

ただし、ログに記録されたメモリの問題はありませんでした。本当の理由についての手がかりがないので、私はまだ少し心配しています:

  • 何が原因でしょうか
    • いくつかのメモリの問題です。ログに見つからないのはなぜですか?
    • スレッドを長時間ブロックしたままにする (非決定論的な) もの
  • これが再び発生した場合、ログで原因を確認する方法はありますか?
    • ログでメモリの問題を取得するために必要な設定はありますか?

更新 : おそらく MySQL 接続テストのハングに問題があるようです。別のより焦点を絞った質問を作成し、問題が解決した後もこれを更新することを忘れないようにします。

4

1 に答える 1