Ubuntu 14 JVM - カードマーキング配列に十分なスペースを予約できませんでした

Ubuntu 14 JVM - カードマーキング配列に十分なスペースを予約できませんでした

Ubuntu 14 にアップグレードした後、すべての JVM がクラッシュするという問題が発生します。

Java (Oracle および OpenJDK バージョン) を再インストールします。JVM ヒープ パラメータの調整に時間を費やし、ようやく Java アプリを実行できるようになりました。

問題は、SQLDeveloper を起動するたびに、Eclipse JVM が「カード マーキング配列に十分なスペースを予約できませんでした」というメッセージを表示することです。

私の理解が正しければ、これは JVM メモリ チャンクの割り当てに関係しています。

このような事態を防ぐために従わなければならないルールはありますか?

マシン情報:

Ubuntu 14.04 LTS; 64 ビット; CPU Intel Core2 Duo; 8GB メモリ

Eclipse: java-7-oracle; -d64; -XX:MaxPermSize=256M; -Xms512m -Xmx512m;

Eclipse 実行/デバッグ: java-6-openjdk-amd64; -Xms1024m; -Xmx1024m; -XX:+UseSerialGC;

SQLDeveloper: java-7-oracle; -XX:MaxPermSize=256M;

答え1

JVM は連続したメモリ ブロックを割り当てようとしています。システムには十分なメモリがあるため、断片化されているはずです。

この問題を解決するために、初期ヒープ サイズを非常に低く設定し (デフォルトの 128 では機能しませんでした)、JVM に処理させました。

JVM 実行パラメータを次のように変更しました。

java-6-openjdk-amd64; -Xms1024m; -Xmx1024m; 

に:

java-6-openjdk-amd64; -Xms64m; -Xmx1024m; 

アップデート:

また、overcommit_ratio を 100 (デフォルト) から 50 に下げました。

$ cat /proc/sys/vm/overcommit_ratio

100 に維持することが推奨されていることは承知していますが、変更を行ったため、Chromium/Eclipse/SQLDeveloper を並行して実行しても、JVM エラーは発生しません。

関連情報