<Dec 13, 2019 2:27:54,237 PM CST> <Notice> <WebLogicServer> <BEA-000388> <JVM called the WebLogic Server shutdown hook. The server will force shutdown now.> <Dec 13, 2019 2:27:54,240 PM CST> <Notice> <WebLogicServer> <BEA-000396> <Server shutdown has been requested by <WLS Kernel>.> <Dec 13, 2019 2:27:54,250 PM CST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to FORCE_SUSPENDING.>
當weblogic使用jvm時出現shutdown現象,優化Jvm
該問題解決方案如下:
確認weblogic使用的jdk是sun還是JRockit,然后需要在Java_OPTIONS加入以下參數
A、sun的jdk-加:-Djava.awt.headless=true -Xrs( -Djava.awt.headless=true可以不用)
B、JRockit的jdk-加:-Xnohup
所以找到setdomainenv.sh, 在文件的最后找到JAVA_OPTIONS="${JAVA_OPTIONS}"
Sun改成:
JAVA_OPTIONS="${JAVA_OPTIONS} -Djava.awt.headless=true -Xrs"
JRockit改成:
JAVA_OPTIONS="${JAVA_OPTIONS} -Xnohup"即可。
原理:
-Xrs
設置XRS阻止了Java:trademark:運行時間環境處理任何內部或外部產生的信號,如SIGSEGV和SIGABRT。提出的任何信號都默認的操作系統處理程序處理。在JVM中禁用信號處理降低約2-4%的性能,這取決於應用程序。
SIGABRT是中止一個程序,它可以被捕捉,但不能被阻塞。處理函數返回后,所有打開的文件描述符將會被關閉,流也會被flush。程序會結束,有可能的話還會core dump。 當程序調用abort(3)時,該進程會向自己發送SIGABRT信號。所以,SIGABRT一般用於信號中一些關鍵的處理,assert失敗時也會使用它。你不應該去捕捉SIGSEGV和SIGABRT信號,如果收到這種信號,說明進程處於一個不確定的狀態,很可能會直接掛起。