Saídas da JVM “Sem console, bifurcará para obter memória suficiente” quando iniciado via cron

1

Eu me deparei com uma mensagem estranha ao iniciar uma JVM via cron: "No console, bifurcar-se para obter memória suficiente". O Google só retorna um punhado de resultados ao procurar por essa string, então pensei em 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 comandos ou quando a JVM é iniciada no momento da inicialização via script de inicialização.

Em todos os casos, o mesmo script de inicialização é chamado para iniciá-lo, e a JVM está recebendo 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 da JVM é enviada 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 forçará outra instância para contornar situações de pouca memória. Então, estou me perguntando por que invocar a JVM de uma tarefa do cron acionaria esse comportamento? Por que não ter um console interpretado como 'pouca memória' mesmo que a JVM já tenha confirmado que tem memória heap e permgen suficiente?

Estou usando o RHEL 6.4.

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

saída java -version:

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)
    
por Giulio Harding 23.02.2015 / 10:57

1 resposta

1

Essa mensagem é proveniente 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 tem 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'

Consulte esta página para detalhes sobre como iniciar e interromper o CQ. Procure por "fork" para ver as (poucas) menções que eles fazem desse comportamento.

    
por 24.02.2015 / 17:20

Tags