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 エラーは発生しません。