JVM genera "Sin consola, se bifurcará para obtener suficiente memoria" cuando se inicia mediante cron

JVM genera "Sin consola, se bifurcará para obtener suficiente memoria" cuando se inicia mediante cron

Me encontré con un mensaje extraño al iniciar una JVM mediante cron: "Sin consola, se bifurcará para obtener suficiente memoria". Google solo devuelve un puñado de resultados cuando busca esa cadena, así que pensé en preguntar aquí para ver si alguien sabe más al respecto...

Este mensaje no aparece cuando inicio la JVM desde la línea de comandos o cuando la JVM se inicia en el momento del arranque mediante un script de inicio.

En todos los casos, se llama al mismo script de inicio para iniciarlo y a la JVM se le pasan los mismos argumentos:

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

Más específicamente, el mensaje JVM se genera en este contexto:

...
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
...

Parece que existe un comportamiento predeterminado en el que la JVM bifurcará otra instancia para solucionar situaciones de poca memoria. Entonces me pregunto por qué invocar la JVM desde un trabajo cron desencadenaría este comportamiento. ¿Por qué no tener una consola se interpretaría como "poca memoria" incluso si la JVM ya ha confirmado que tiene suficiente memoria dinámica y permanente?

Estoy usando RHEL 6.4.

Nombre del paquete Java: jdk-1.7.0_55-fcs.x86_64

salida de la versión java:

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)

Respuesta1

Ese mensaje proviene de la aplicación CQ, no de la JVM. Por lo que deduzco, en algunas circunstancias CQ lanzará JVM separadas para diferentes partes del sistema. CQ tiene algunas opciones de línea de comandos para controlar este comportamiento:

-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'

Veresta páginapara obtener detalles sobre cómo iniciar y detener CQ. Busque "fork" para ver las (pocas) menciones que hacen sobre este comportamiento.

información relacionada