JVM은 cron을 통해 시작될 때 "콘솔이 없습니다. 충분한 메모리를 얻기 위해 분기됩니다"를 출력합니다.

JVM은 cron을 통해 시작될 때 "콘솔이 없습니다. 충분한 메모리를 얻기 위해 분기됩니다"를 출력합니다.

cron을 통해 JVM을 시작할 때 "콘솔이 없습니다. 충분한 메모리를 얻기 위해 포크할 것입니다"라는 이상한 메시지를 발견했습니다. Google은 해당 문자열을 검색할 때 소수의 결과만 반환하므로 이에 대해 더 알고 있는 사람이 있는지 확인하기 위해 여기에 문의해야겠다고 생각했습니다.

명령줄에서 JVM을 시작하거나 부팅 시 init 스크립트를 통해 JVM을 시작할 때 이 메시지가 나타나지 않습니다.

모든 경우에 동일한 init 스크립트가 호출되어 시작되며 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을 호출하면 왜 이런 동작이 발생하는지 궁금합니다. JVM이 이미 충분한 힙 및 permgen 메모리를 가지고 있음을 확인한 경우에도 콘솔이 '메모리 부족'으로 해석되지 않는 이유는 무엇입니까?

RHEL 6.4를 사용하고 있습니다.

Java 패키지 이름: jdk-1.7.0_55-fcs.x86_64

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)

답변1

해당 메시지는 JVM이 아닌 CQ 애플리케이션에서 나옵니다. 내가 수집한 바에 따르면 어떤 상황에서는 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 시작 및 중지에 대한 자세한 내용은 이 동작에 대해 언급된 내용을 보려면 "포크"를 검색하세요.

관련 정보