透過 cron 啟動時,JVM 輸出“沒有控制台,將分叉以獲得足夠的記憶體”

透過 cron 啟動時,JVM 輸出“沒有控制台,將分叉以獲得足夠的記憶體”

我在通過 cron 啟動 JVM 時遇到一條奇怪的消息:“沒有控制台,將分叉以獲得足夠的內存”。搜尋該字串時,谷歌只返回少量結果,所以我想我應該在這裡問一下,看看是否有人知道更多關於它的資訊...

當我從命令列啟動 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 會衍生另一個實例來解決記憶體不足的情況。所以我想知道為什麼從 cron 作業呼叫 JVM 會觸發這種行為?即使 JVM 已經確認它有足夠的堆和永久內存,為什麼控制台不會被解釋為“內存不足”?

我使用的是 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”即可查看他們對此行為的(少數)提及。

相關內容