Weblogic接收SIGQUIT資訊號引發服務中止問題
1 背景介紹
某日某客戶運維工程師接收到系統報障反應業務緩慢,工程師用命令kill -3 < WLS_PID >的方式傳送一個SIGQUIT訊號給Java應用之後,通常會有當前的Thread Dump輸出,最後thread dump資訊沒有收集出來,相反weblogic程式自動退出,導致服務停止,業務無法正常工作。
2 系統環境
作業系統: Redhat6.4
JDK版本: JDK1.6
中介軟體版本:weblogic10.3.6
叢集:否
3 故障處理過程
3.1故障 分析
2020-09-13 15:23左右,客戶現場運維工程師接收到報障反應系統訪問相當慢,於是運維工程師立即檢查中介軟體執行情況,並做了一下執行緒轉儲收集。在做執行緒轉儲收集時候,服務被終止。現場工程師說當時執行了kill -3 <WLS_PID>這條命令來收集thread dump資訊,沒想到竟然把weblogic服務程式給殺掉了。他說以前平時常用kill -3來收集執行緒資訊,今天竟奇怪的把服務給幹掉了。他也反覆確認操作的命令沒錯。
<Sep 11, 2020 4:09:36 PM CST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to STANDBY> <Sep 11, 2020 4:09:36 PM CST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to STARTING> <Sep 11, 2020 4:09:40 PM CST> <Notice> <Log Management> <BEA-170027> <The Server has established connection with the Domain level Diagnostic Service successfully.> <Sep 11, 2020 4:09:40 PM CST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to ADMIN> <Sep 11, 2020 4:09:40 PM CST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RESUMING> <Sep 11, 2020 4:09:40 PM CST> <Notice> <Server> <BEA-002613> <Channel "Default" is now listening on 192.168.106.100:9001 for protocols iiop, t3, ldap, snmp, http.> <Sep 11, 2020 4:09:40 PM CST> <Notice> <WebLogicServer> <BEA-000329> <Started WebLogic Admin Server "bps_Server1" for domain "bps_domain" running in Production Mode> <Sep 11, 2020 4:09:40 PM CST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING> <Sep 11, 2020 4:09:40 PM CST> <Notice> <WebLogicServer> <BEA-000360> <Server started in RUNNING mode> Quit (core dumped) << 程式退出訊號 |
發現故障時間15:24產生了一個core dump檔案,應該是kill -3訊號產生的檔案。
weblogic@bps_prod:~/weblogic11g/user_projects/domains/bps_domain> ls -lrt total 1132 drwxr-x--- 2 weblogic weblogic 4096 Aug 31 14:34 lib drwxr-x--- 2 weblogic weblogic 4096 Aug 31 14:34 console-ext drwxr-x--- 2 weblogic weblogic 4096 Aug 31 14:34 autodeploy drwxr-x--- 2 weblogic weblogic 4096 Aug 31 14:34 security -rwxr-x--- 1 weblogic weblogic 277 Aug 31 14:34 startWebLogic.sh -rw-r----- 1 weblogic weblogic 736 Aug 31 14:34 startManagedWebLogic_readme.txt drwxr-x--- 2 weblogic weblogic 4096 Aug 31 14:34 init-info -rw-r----- 1 weblogic weblogic 462 Aug 31 14:34 fileRealm.properties drwxr----- 7 weblogic weblogic 4096 Sep 1 02:01 servers -rw-r----- 1 weblogic weblogic 235 Sep 9 14:01 shutdown.py drwxr----- 2 weblogic weblogic 4096 Sep 10 21:43 tmp drwxr----- 2 weblogic weblogic 4096 Sep 10 21:44 pending -rw-r----- 1 weblogic weblogic 32 Sep 10 21:44 edit.lok drwxr-x--- 10 weblogic weblogic 4096 Sep 10 22:01 config -rw------- 1 weblogic weblogic 1224704 Sep 13 15:24 core <<kill 訊號 3 產生的 core 檔案 |
分析產生的 core 檔案,沒有找到完整的資訊
weblogic@bps_prod:~/weblogic11g/user_projects/domains/bps_domain> gdb /u01/jdk1.7.0_80/bin/java core GNU gdb (GDB) SUSE (7.3-0.6.1) Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later < This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-suse-linux". For bug reporting instructions, please see: < Reading symbols from /u01/jdk1.7.0_80/bin/java...Missing separate debuginfo for /u01/jdk1.7.0_80/bin/java Try: zypper install -C "debuginfo(build-id)=b82a586842f6da3df8a61093daadf04180e85c16" (no debugging symbols found)...done. BFD: Warning: /u01/weblogic/weblogic11g/user_projects/domains/bps_domain/core is truncated: expected core file size >= 501276672, found: 1224704. [New LWP 20758] [New LWP 20759] [New LWP 20760] [New LWP 20761] [New LWP 20762] [New LWP 20763] [New LWP 20764] [New LWP 20769] [New LWP 20771] [New LWP 20773] [New LWP 20775] [New LWP 20776] [New LWP 20777] [New LWP 20778] [New LWP 20779] [New LWP 20780] [New LWP 20782] [New LWP 20783] Cannot access memory at address 0x7f4fc97f5188 Failed to read a valid object file image from memory. Core was generated by `/u01/jdk1.7.0_80/bin/java -server -Xms256m -Xmx512m -XX:MaxPermSize=256m -Dwebl'. Program terminated with signal 3, Quit. #0 0x00007f4fc93bff95 in ?? () (gdb) bt #0 0x00007f4fc93bff95 in ?? () Cannot access memory at address 0x7fff021dec40 |
聯想起以前處理過類似問題,weblogic程式自動退出。不想要作業系統呼叫正在終止JVM程式。 當某個元件將不正確的關閉訊號傳送到JVM時會發生此問題。 然後,JVM捕獲這些訊號,並關閉所有JAVA程式。
<Notice> <WebLogicServer> <
domain_name> <
server_name> <Thread-1> ... <BEA-000388> <JVM called WLS shutdown hook. The server will force shutdown now>
|
當時解決這個問題方法是,將-Xrs引數新增到標準WebLogic啟動指令碼中的JAVA_OPTIONS啟動引數中。
為什麼要加-Xrs引數的原因?
引數-Xrs是為了避免JVM對作業系統訊號的使用。 這個引數告訴JVM不要為許多事情使用任何作業系統訊號,而是依靠載入應用程式(啟動器)來處理TERM,INT; HUP和QUIT。如果JVM作為服務執行,它可以接收CTRL_LOGOFF_EVENT,但不應該啟動關閉,因為作業系統不會實際終止程式。
回過頭來檢查domain 下的啟動環境變數指令碼,發現2020-09-07 22:23 這個時間點setDomainEnv.sh 環境變數指令碼有改動過,而且在JAVA_OPTIONS 變數後確實加入了引數-Xrs.
經過自己在幾個不同版本測試環境下測試,加了這個 -Xrs 引數確實 用 kill -3 會把服務程式殺死。不加這個 -Xrs 引數用 kill -3 不會把程式殺死,也能夠收集 thread dump 資訊。
3.2 故障原因
將-Xrs引數新增到標準WebLogic啟動指令碼中的JAVA_OPTIONS啟動引數中,如果用kill -3命令去收集thread dump資訊,直接會觸發作業系統訊號殺掉服務程式。
4 解決方案
由於大家常用習慣用kill-3命令來收集執行緒轉儲資訊,導致出現這樣的問題。記住以後在生產系統kill儘量不用,不管kill後面帶什麼訊號引數,不建議在生產環境上面執行。
以下是抓取threaddump 常用方法
1 ) JVM 自帶的工具獲取執行緒堆疊 :
$ JAVA_HOME/bin/jstack wls_pid
2 )WebLogic 自帶的獲取 thread dump 的工具:
<DOMAIN_HOME>/bin/setDomainEnv.sh
$JAVA_HOME/bin javaweblogic.Admin -url t3://localhost:9001 -username weblogic -password weblogic1THREAD_DUMP
3 )使用utils.ThreadDumper
java -cpC:\bea\wlserver_10.3\server\lib\weblogic.jar utils.ThreadDumper
4 )使用weblogic console 方法生成
a. 登入 Admin Console , 點選對應的伺服器
b. 點選Server à Monitoring àThreads
c. 點選: Dump Thread Stack 按鈕
5 )使用WLST 工具
java weblogic.WLSTthreaddump.py
5、總結
本次故障是因一個問題引發了另一個問題,導致問題處理較為急手,作為一名合格的運維工程師,當問題發生後要保持清醒的頭腦,不要盲目去做一些自己不確定性的操作,操作的每一條 指令是否會危機到生產業務。一旦出現操作失誤會讓自己面臨不可收拾的困境。故障雖大還是要學會自我保護。不確定的操作要懂得諮詢專家,操作方案需經過專家評審,故障恢復後做反思與總結。
有需要的朋友可以關注我的公眾號,文章每日一更
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28833846/viewspace-2723080/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- zabbix active 動作配置(當weblogic服務存在問題,執行指令碼重啟weblogic服務)Web指令碼
- weblogic報錯BEA-000388解決服務程式異常消失問題Web
- JS中缺少分號可能引發的問題JS
- Dubbo原始碼解析之服務端接收訊息原始碼服務端
- 網際網路資訊服務安全檢查接收材料清單
- Spring+xfire和Spring+CXF在Weblogic上釋出服務遇到的問題SpringWeb
- 向SQLServer插入單引號問題SQLServer
- JVM調優筆記(一)--Nacos GC引發的服務批次下線問題JVM筆記GC
- weblogic控制檯訪問慢問題Web
- [20190419]bash單雙引號問題.txt
- weblogic多資料來源故障轉移問題Web
- Golang 系統訊號接收說明Golang
- post傳引數,但是後端無法接收問題解決後端
- weblogic服務建立資料來源連線測試更新mysql驅動包的問題及解決方法LHQJWebMySql
- 一個延時任務問題引發的思考
- Java服務.問題排查.問題復現Java
- 生活服務app開發的三個問題APP
- 檢視weblogic版本資訊Web
- 關於oracle資料庫訊號量的問題Oracle資料庫
- 如何透過文字服務轉發在iPad和Mac上傳送和接收簡訊iPadMac
- 資料編號+1 併發問題解決
- 【FAQ】接入華為帳號服務過程中常見問題總結
- 【Azure 服務匯流排】詳解Azure Service Bus SDK中接收訊息時設定的maxConcurrentCalls,prefetchCount引數
- 使用postman傳送資料,springmvc接收資料的問題PostmanSpringMVC
- Nginx安全問題 允許潛在攻擊者觸發拒絕服務(DoS)狀態並訪問敏感的資訊Nginx
- 【踩坑】spring mvc在接收請求引數時由於大小寫問題導致的接收失敗SpringMVC
- 全球資訊網服務
- 解決SSL Network Extender服務已中止且無法啟動
- shell指令碼監控啟動停止weblogic服務指令碼Web
- 一次 Jedis 引數異常引發服務雪崩
- SAS服務效能問題專案
- 關於 RocketMQ ClientID 相同引發的訊息堆積的問題MQclient
- 【Weblogic】java.lang.UnsupportedClassVersionError問題處理方案WebJavaError
- 獲取AFP服務資訊
- 利用 Transform 解決模組化開發服務呼叫問題ORM
- 如何控制開放HTTPS服務的weblogic伺服器HTTPWeb伺服器
- 關於node服務部署的問題
- WebSocket 服務掛掉問題記錄Web