JVM выводит сообщение «Нет консоли, будет выполнена разветвление для получения достаточного количества памяти» при запуске через cron

JVM выводит сообщение «Нет консоли, будет выполнена разветвление для получения достаточного количества памяти» при запуске через cron

Я столкнулся со странным сообщением при запуске JVM через cron: "Нет консоли, будет выполнен fork для получения достаточного количества памяти". Google возвращает лишь несколько результатов при поиске по этой строке, поэтому я решил спросить здесь, может, кто-то знает об этом больше...

Это сообщение не появляется, когда я запускаю JVM из командной строки или когда JVM запускается во время загрузки через сценарий инициализации.

Во всех случаях для запуска вызывается один и тот же сценарий инициализации, а JVM передаются одни и те же аргументы:

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

Более конкретно, сообщение JVM выводится в следующем контексте:

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

Кажется, есть некое поведение по умолчанию, когда JVM будет разветвлять другой экземпляр, чтобы обойти ситуации с нехваткой памяти. Так что мне интересно, почему вызов JVM из задания cron может вызвать такое поведение? Почему отсутствие консоли будет интерпретироваться как «недостаток памяти», даже если JVM уже подтвердила, что у нее достаточно памяти heap и permgen?

Я использую RHEL 6.4.

Имя пакета Java: jdk-1.7.0_55-fcs.x86_64

Вывод версии 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)

решение1

Это сообщение исходит от приложения CQ, а не от JVM. Насколько я понял, в некоторых обстоятельствах CQ запускает отдельные JVM для разных частей системы. У CQ есть несколько параметров командной строки для управления этим поведением:

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

Видетьэта страницадля получения подробной информации о запуске и остановке CQ. Поищите "fork", чтобы увидеть (немного) упоминаний, которые они делают об этом поведении.

Связанный контент