4

私は大規模なJavaアプリケーションに取り組んできました。これは非常に並列であり、いくつかのfixedThreadPools(それぞれ8つのスレッドを持つ)を使用します。それぞれ4つのプロセッサを搭載した2つのコアを搭載したコンピュータで実行しています。私のプログラムは大量のデータセットを分析しており、分析はデータセット間で機能しますが、すべてのセットの後に保存(シリアル化)されるため、新しいデータセットを実行するたびに再ロードされます(その後保存されます)。私の問題はこれです:4-5データセットを実行した後(約2日かかり、コーディング効率にかなり満足しています)、5番目のセットでまったく同じ時間の後にクラッシュします(どのデータセットに関係なく)私が使う)。プログラムは反復的であるため、現時点で進行中のコードに新しいものはありません。再現性があり、どうしたらいいのかわかりません。それが助けになるなら、私は完全なエラーログを投稿することができます...

私はさまざまな設定をテストして、何かが役立つかどうかを確認してきました。現在、次の引数を使用して実行しています。

-Xmx6g -Xmx12g -XX:+ UnlockExperimentalVMOptions -XX:+ UseG1GC

ありがとう、ジョー

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x0000000000000000, pid=18454, tid=140120548144896
#
# JRE version: 7.0_03-b147
# Java VM: OpenJDK 64-Bit Server VM (22.0-b10 mixed mode linux-amd64 compressed oops)
# Derivative: IcedTea7 2.1.1pre
# Distribution: Ubuntu precise (development branch), package 7~u3-2.1.1~pre1-1ubuntu2
# Problematic frame:
# C  0x0000000000000000
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please include
# instructions on how to reproduce the bug and visit:
#   https://bugs.launchpad.net/ubuntu/+source/openjdk-7/
#
4

3 に答える 3

3

難しい推測です...

これ以上ファイルを作成できない可能性があります

Linuxでこれを実行している場合実行してみてください

ulimit -c unlimited

Javaプログラムを実行する前に...これは2つの方法で役立つはずです

  1. ファイル作成制限を増やす必要があります
  2. エラーが発生すると、コアダンプが作成されます。

プログラムの実行中に使用しているファイルIOの数を確認します。

于 2012-07-03T15:38:37.533 に答える
1

VisualVMのようなものでインストルメントします。アプリの実行中に、メモリ、スレッド、CPU、作成されたオブジェクトなどで何が起こっているかをリアルタイムで表示します。

私が持っている素晴らしいバージョンは、Oracle /SunJVM専用です。JDKに同梱されているものもありますが、すべてのプラグインがインストールされているバージョン1.6.3ほど詳細には表示されないと思います。

于 2012-07-03T15:41:55.943 に答える
0

eclipse.iniファイルに-Dorg.eclipse.swt.browser.DefaultType=mozillaを追加するだけです。

于 2014-08-29T13:58:48.277 に答える