2

私のWebアプリケーションはTomcatサーバーで動作しますが、しばらくするとメモリ使用量が増え始め、サーバーがダウンするまで増えます。

これはライブでのみ発生し、この状況をローカルで再現しようとすると発生しませんでした。JProfiler を使用してリモートでプロファイリングを試みたところ、サーバーがダウンする前に大量の byte[] が見つかりました。メモリの消費量が増え始めてから 2 ~ 3 分後にサーバーがダウンするため、ヒープ ウォークに時間がかかるため (Web アプリは非常に大きい)、コードで byte[] を使用しているアイテムを確認できません。

どんな助けや提案にも感謝します。

4

1 に答える 1

0

提案: HashMap、Vector (またはこれらのコレクションの非同期バージョン) を使用したキャッシュ ストレージ フィールドであるクラスにいくつかのメモリ使用量のダンプを配置します。通常、これらは参照を保持します。次のように、変数をダンプするプラスのURLを配置するよりも:

Runtime.getRuntime().callMemoryFunctionForgotName(): 使用メモリは 270MB です。-ここでは、WHEN が成長していることがわかります。時間の経過とともに、アクションがあり、そのうちの 1 つにリークがあります。

  • action9 で link43 を検出すると、簡単にメモリリークが発生します:)
  • いくつかの hashMap.count() または size() (これも忘れました、笑) を logg に追加するだけで、20 個のコレクションのうちどれが増加して減少していないかがわかります。ライブ サーバー ログにアクセスできることを願っています。

だから私は2つのステップで行います。

于 2012-08-24T20:05:26.190 に答える