2012-03-15 8 views
1

本番環境では、Java 1.6.0_21よりApache Tomcat 5.5.30の複数のインスタンスを実行するCentOS 5 Linuxボックスが用意されています。各Tomcatは、Postgres 9.1 RDBMSからデータを取り出し、HTML/PDF/etcレポートを生成するJava EE WebAppをホストしています。

トリガーがまだ決定されていないため、Javaプロセスの1つが、マシンがメモリをHDにページングするまでRAMの使用量を(数十ギガに)増加させ、サーバー全体を立っている。 私は通常JProbeを使用して、どのオブジェクトがすべてのRAMを消費しているかを監視しますが、サーバーはヘッドレスLinuxインストールであるため、これはオプションではありません。

一定の間隔で最も多くのメモリを消費するJavaオブジェクトをログに記録するヘッドレス(CLI)ツールはありますか?それは問題を診断する最善の方法ですか?実稼働のLinuxボックスでメモリ関連のJavaクラッシュを診断する方法

UPDATE:以下受け取ったフィードバックを使用して は、私は問題の一部は、我々は実際のクラッシュを取得していないが、全体のマシンまでのHDへのプロセスだけでページのRAMが応答しなくなることがあることに気づきました。これに対する1つの解決策(私は考えました)は、Javaが使用できる最大RAMを数GBに制限する-Xmxパラメータを設定することです。残念ながら、JVMはこの設定を無視していて、クラッシュすることなく望みどおりに消費しているようです。限度を強制する別の方法がありますか?

+0

JVMとOSのバージョンを教えてもらえますか? –

+0

また、ps -el | grep javaを実行し、プロセスに渡される最終的なパラメータを通知します。 –

答えて

0

これについてはいくつかの方法があります。

明らかに最初のステップは、(-verboseのようなのparams追加:GC -Xloggc:/path/to/gc.log -XX:+ PrintGCDetailsなど)ガベージコレクションのログを有効にするだろうラインに

次されていますはい、jvisualvmはGUIツールですが、私はあなたがXを行うことができると考えています。

自分で少しでも気にしないでください。あなたの主要なクラスとメソッドのためのBTraceプローブを書いてみませんか?

まだ情報が不十分ですか? AppDynamicsLiteのようなツールを試してみたいです。(商用のフリースピンオフもあります。http://www.appdynamics.com/products-free-download.php

これは私が仕事に持ち込むツールキットのようなものです。

+0

[GCViewer](http://www.tagtraum.com/gcviewer.html)を使用してGCログを分析できます。このサイトには、メモリの問題を解決するためのヒントもいくつかあります。 – radimpe

1

私はここで二つの問題を参照してください。使用可能なRAM <最大ヒープが定義されていない限り

  1. あなたのVMがページではないでしょうが。したがって、定義されたMaxヒープが使用可能なRAMより少ないことを確認してください。
  2. 次に、OutOfMemoryErrorsが表示されていると仮定すると、plesaeはJVMパラメータ-XX: HeapDumpOnOutOfMemoryError
  3. 次回問題が発生すると、Eclpise MATまたはYourkitプロファイラを使用して解析してメモリをいっぱいにするヒープダンプが作成されます。これは実際に問題の原因となっているコードの部分を示します。
関連する問題