A JVM gera "Sem console, será bifurcado para obter memória suficiente" quando iniciado via cron

A JVM gera "Sem console, será bifurcado para obter memória suficiente" quando iniciado via cron

Me deparei com uma mensagem estranha ao iniciar uma JVM via cron: "Sem console, será bifurcado para obter memória suficiente". O Google retorna apenas alguns resultados ao pesquisar essa string, então resolvi perguntar aqui para ver se alguém sabe mais sobre isso...

Esta mensagem não aparece quando inicio a JVM a partir da linha de comando ou quando a JVM é iniciada no momento da inicialização por meio do script de inicialização.

Em todos os casos, o mesmo script de inicialização é chamado para iniciá-lo e a JVM recebe os mesmos 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

Mais especificamente, a mensagem JVM é gerada neste 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 há algum comportamento padrão em que a JVM bifurca outra instância para contornar situações de pouca memória. Então, estou me perguntando por que invocar a JVM a partir de um cron job acionaria esse comportamento? Por que não ter um console seria interpretado como 'pouca memória', mesmo que a JVM já tenha confirmado que possui memória heap e permgen suficiente?

Estou usando RHEL 6.4.

Nome do pacote Java: jdk-1.7.0_55-fcs.x86_64

Saída da versão 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)

Responder1

Essa mensagem vem do aplicativo CQ, não da JVM. Pelo que entendi, em algumas circunstâncias o CQ lançará JVMs separadas para diferentes partes do sistema. O CQ possui algumas opções de linha de comando para controlar esse comportamento:

-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 obter detalhes sobre como iniciar e parar o CQ. Procure por “fork” para ver as (poucas) menções que eles fazem a esse comportamento.

informação relacionada