
Beim Starten einer JVM über Cron bin ich auf eine merkwürdige Meldung gestoßen: „Keine Konsole, wird aufgespalten, um genügend Speicher zu erhalten.“ Google gibt bei der Suche nach dieser Zeichenfolge nur eine Handvoll Ergebnisse zurück, also dachte ich, ich frage hier nach, ob jemand mehr darüber weiß ...
Diese Meldung wird nicht angezeigt, wenn ich die JVM über die Befehlszeile starte oder wenn die JVM beim Booten über ein Init-Skript gestartet wird.
In allen Fällen wird zum Starten dasselbe Init-Skript aufgerufen und der JVM werden dieselben Argumente übergeben:
java -server -Xmx4096m -XX:MaxPermSize=256M -Djava.awt.headless=true -Djava.security.auth.login.config=/usr/local/aem/
author-4502/crx-quickstart/conf/ldap_login.conf -Dcom.sun.management.jmxremote.port=9502 -Dcom.sun.management.jmxremote.
authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar cq5-author-p4502.jar -use-control-port -p 4502 -gui -no
browser -verbose -r japan,qa
Genauer gesagt wird die JVM-Meldung in diesem Kontext ausgegeben:
...
Low-memory action set to fork
Using 64bit VM settings, min.heap=1024MB, min permgen=256MB, default fork arguments=[-Xmx1024m, -XX:MaxPermSize=256m]
The JVM reports a heap size of 3641 MB, meets our expectation of 1024 MB +/- 20
The JVM MBean:PS Perm Gen reports a maximum size of 256 MB, meets our expectation of 256 MB +/- 20
No console, will fork to get enough memory
...
Es scheint, dass es ein Standardverhalten gibt, bei dem die JVM eine andere Instanz aufspaltet, um Situationen mit wenig Speicher zu umgehen. Ich frage mich also, warum das Aufrufen der JVM von einem Cron-Job aus dieses Verhalten auslösen würde. Warum würde das Fehlen einer Konsole als „wenig Speicher“ interpretiert werden, selbst wenn die JVM bereits bestätigt hat, dass sie über genügend Heap- und Permgen-Speicher verfügt?
Ich verwende RHEL 6.4.
Java-Paketname: jdk-1.7.0_55-fcs.x86_64
Java-Versionsausgabe:
java version "1.7.0_55"
Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)
Antwort1
Diese Meldung kommt von der CQ-Anwendung, nicht von der JVM. Soweit ich weiß, startet CQ unter bestimmten Umständen separate JVMs für verschiedene Teile des Systems. CQ verfügt über einige Befehlszeilenoptionen, um dieses Verhalten zu steuern:
-debug <port>
Enable Java Debugging on port number; forces forking
-nofork
Do not fork the JVM, even if not running on a console
-fork
Force forking the JVM if running on a console, using recommended
default memory settings for the forked JVM.
-forkargs <args> [<args> ...]
Additional arguments for the forked JVM, defaults to '-Xmx1024m
-XX:MaxPermSize=256m '. Use -- to specify values starting with -,
example: '-forkargs -- -server'
Sehendiese Seitefür Details zum Starten und Stoppen von CQ. Suchen Sie nach „fork“, um die (wenigen) Erwähnungen dieses Verhaltens zu sehen.