4

私はJava開発者ではありませんが、机に着陸したアプリです。これは、Tomcatコンテナで実行されるWebサービスのサーバー側アプリです。ユーザーはクライアントアプリケーションからそれをヒットしました。

ユーザーは絶えずそれがどれほど遅いかについて不平を言い、アプリは週に約2回再起動する必要があり、事態は非常に悪くなります。

以前の開発者は、アプリは単にメモリを使い果たし(時間の経過とともにより多くのデータをロードするため)、最終的にはガベージコレクションにすべての時間を費やすと私に言いました。一方、Tomcatのヒープサイズは6GBに設定されています。ボックス自体には32GBのRAMが搭載されています。

ヒープサイズを16GBに増やすことに害はありますか?
問題を解決する簡単な方法のようですが、私はJavaの専門家ではありません。

4

5 に答える 5

5

ヒープスペースを追加するのではなく、リークを特定して修正する必要があります。それはただのストップギャップです。

エラー時にヒープをダンプするようにtomcatを構成し、クラッシュ後に任意の数のツールの1つでヒープを分析する必要があります。すべての留め金の保持サイズを計算できます。これにより、何が問題であるかを非常に明確に把握できます。

私のプロフィールでは、最近やらなければならなかったので、これに関するブログ投稿へのリンクがあります。

于 2011-03-03T18:19:49.587 に答える
2

いいえ、ヒープサイズを16GBに増やしても問題はありません。

于 2011-03-03T23:01:38.603 に答える
1

これらの問題を解決するには、パフォーマンステストを行う必要があります。これには、CPUとメモリの両方の分析が含まれます。JDK(6)には、VisualVMというツールがバンドルされています。私のMac OS Xマシンでは、これはデフォルトで「jvisualvm」としてパス上にあります。それは無料でバンドルされているので、始める場所です。

次は、NetBeansプロファイラー(netbeans.org)です。これにより、より多くのメモリとCPUの分析が行われます。それも無料ですが、もう少し複雑です。

お金を使うことができるなら、YourKit(http://www.yourkit.com/)を強くお勧めします。それほど高価ではありませんが、何が起こっているのかを簡単に把握できるようにする多くの診断機能が組み込まれています。

できないことの1つは、メモリを追加するだけで問題が解決すると想定することです。リークの場合は、メモリを追加すると、再起動の間隔が少し長くなる可能性があります。

于 2011-03-03T18:30:07.403 に答える
1

以前の開発者は、アプリが単にメモリを使い果たしていると私に言いました(時間の経過とともにより多くのデータをロードするため)

これはメモリリークのように見えます。これはアプリケーションの重大なバグです。使用可能なメモリの量を6GiBから16GiBに増やしても、アプリケーションを再起動する必要がありますが、頻度は少なくなります。一部の経験豊富な開発者は、実行中にアプリケーションヒープを確認し(hvgotcodesのヒントを参照)、アプリケーションを修正する必要があります。

于 2011-03-03T18:21:25.327 に答える
1

JProfiler、VisualVM、jConsole、YourKitなどのプロファイリングツールを使用することをお勧めします。アプリケーションのヒープダンプを取得して、どのオブジェクトがメモリを消費しているかを分析できます。

于 2011-03-03T18:59:35.493 に答える