EA-000388 JVM called WLS shutdown hook

剛接手一項目,weblogic部署環境,發現weblogic每隔幾個小時就shutdown一次,經過跟蹤發現既不是內存問題,也不是數據庫連接池問題,更不是訪問量過大引起。

  查詢相關日誌,只有以下幾句shutdown的日誌:

    <BEA-000388> <JVM called WLS shutdown hook. The server will force shutdown now> 
    <BEA-000396> <Server shutdown has been requested by <WLS Kernel>> 
    <BEA-000365> <Server state changed to FORCE_SUSPENDING>

  從上面的日誌看來,更像是人爲關閉weblogic產生的日誌,一時間感覺沒有頭緒。經過半年多的查詢各種相關資料,把問題範圍鎖定到jdk的相關問題。看到某文章上有一段話,大概是這樣:When WebLogic Server running with the Sun JVM is shutdown, it is because there is a unwanted operating system call terminating the process.意思是說:當你的weblogic使用sun jvm時出現shutdown現象,是系統的一個不必要的操作,導致要關閉這個進程。而我的weblogic剛好使用的是sun jvm。

  該問題解決方案如下:

  確認你的weblogic使用的jdk是sun jdk還是JRockit jdk,然後需要在JAVA_OPTIONS加入以下參數

    A sun jdk-加: -Djava.awt.headless=true -Xrs( -Djava.awt.headless=true可以不用)

              B JRockit jdk-加: -Xnohup

        所以找到 setdomainenv.sh,在文件的最後找到 JAVA_OPTIONS="${JAVA_OPTIONS}"改成JAVA_OPTIONS="${JAVA_OPTIONS} -Djava.awt.headless=true -Xrs"或JAVA_OPTIONS="${JAVA_OPTIONS} -Xnohup "即可。

  關於修改JAVA_OPTIONS其實在很多相啓動時的配置文件都可以修改,以上是linux環境weblogic修改方案。

 

      原理:

  -Xrs來
  設置XRS阻止了Java:trademark:運行時間環境處理任何內部或外部產生的信號,如SIGSEGV和SIGABRT。提出的任何信號都默認的操作系統處理程序處理。在JVM中禁用信號處理降低約2-4%的​​性能,這取決於應用程序。 
       SIGABRT是中止一個程序,它可以被捕捉,但不能被阻塞。處理函數返回後,所有打開的文件描述符將會被關閉,流也會被flush。程序會結束,有可能的話還會core dump。 當程序調用abort(3)時,該進程會向自己發送SIGABRT信號。所以,SIGABRT一般用於信號中一些關鍵的處理,assert失敗時也會使用它。你不應該去捕捉SIGSEGV和SIGABRT信號,如果收到這種信號,說明進程處於一個不確定的狀態,很可能會直接掛起。

發佈了129 篇原創文章 · 獲贊 63 · 訪問量 79萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章