Nach dem Upgrade auf Ubuntu 14 habe ich das Problem, dass alle JVMs abstürzen.
Ich installiere Java neu (Oracle- und OpenJDK-Versionen). Ich verbringe einige Zeit damit, die JVM-Heap-Parameter zu optimieren, und jetzt kann ich endlich Java-Apps ausführen.
Jetzt besteht das Problem darin, dass meine Eclipse JVM jedes Mal, wenn ich SQLDeveloper starte, die Meldung „Für das Kartenmarkierungs-Array konnte nicht genügend Speicherplatz reserviert werden“ ausgibt.
Wenn ich das richtig verstehe, hat es etwas mit der Zuweisung der JVM-Speicherblöcke zu tun.
Gibt es eine Regel, die ich befolgen muss, um dies zu verhindern?
Maschineninfo:
Ubuntu 14.04 LTS; 64-Bit; CPU Intel Core2 Duo; 8 GB Speicher
Eclipse: java-7-oracle; -d64; -XX:MaxPermSize=256M; -Xms512m -Xmx512m;
Eclipse ausführen/debuggen: java-6-openjdk-amd64; -Xms1024m; -Xmx1024m; -XX:+UseSerialGC;
SQLDeveloper: java-7-oracle; -XX:MaxPermSize=256M;
Antwort1
JVM versucht, einen zusammenhängenden Speicherblock zuzuweisen. Da ich auf dem System genügend Speicher habe, muss dieser fragmentiert werden.
Um das Problem zu beheben, habe ich die anfängliche Heap-Größe sehr niedrig eingestellt (der Standardwert von 128 funktionierte nicht) und es der JVM überlassen, damit umzugehen.
Ich habe die JVM-Ausführungsparameter von: geändert.
java-6-openjdk-amd64; -Xms1024m; -Xmx1024m;
Zu:
java-6-openjdk-amd64; -Xms64m; -Xmx1024m;
Aktualisieren:
Ich habe auch das Overcommit_Ratio von 100 (Standard) auf 50 gesenkt.
$ cat /proc/sys/vm/overcommit_ratio
Ich weiß, dass empfohlen wird, es bei 100 zu belassen, aber seit ich die Änderung vorgenommen habe, erhalte ich die JVM-Fehler nicht mehr, wenn ich Chromium/Eclipse/SQLDeveloper parallel ausführe.