在 Linux 環境部署 Oracle WebLogic Server 時,受管伺服器啟動失敗是常見挑戰。本文針對兩大高頻報錯——.lok 鎖檔案殘留與 IPv6 導致的 Socket 關閉異常,提供經實戰驗證的精準解決方案,助你快速恢復服務。
啟動受管伺服器時,日誌報錯提示無法獲取鎖,或直接提示 .lok 檔案已存在。典型錯誤訊息類似:
java.io.IOException: Could not obtain lock on /path/to/servers/ManagedServer1/tmp/ManagedServer1.lok
WebLogic 使用 .lok 檔案機制防止同一域配置下同名伺服器實例重複啟動。若上次關機不正常(Kill -9、進程崩潰、儲存異常),鎖檔案未被正確釋放,再次啟動時核心檢測到檔案存在即拒絕啟動。
find $DOMAIN_HOME -name "*.lok" -type f
# 典型路徑:$DOMAIN_HOME/servers//tmp/.lok
ps -ef | grep | grep -v grep
# 若有殘留進程,先正常停止或 kill -9
rm -f $DOMAIN_HOME/servers//tmp/.lok
# 例:
rm -f /u01/oracle/user_projects/domains/base_domain/servers/ManagedServer1/tmp/ManagedServer1.lok
$DOMAIN_HOME/bin/startManagedWebLogic.sh ManagedServer1 https://AdminHost:7001
最佳實踐:在啟動腳本中加入啟動前自動清理邏輯,或使用 Node Manager 管理啟動流程,Node Manager 會自動處理鎖檔案。
啟動日誌出現:
Multicast socket receive error: java.net.SocketException: Socket closed
...
java.io.IOException: Invalid argument
常見於啟用 IPv6 的 Linux 系統(RHEL 6/7, CentOS 6/7, Oracle Linux 等),WebLogic 預設嘗試使用 IPv6 多播進行叢集通訊,但系統/網路/核心配置不完整導致 Socket 建立失敗。
JVM 在雙棧系統上預設優先使用 IPv6。若核心參數 net.ipv6.bindv6only=1、防火牆阻擋 IPv6 多播、或網卡無 IPv6 位址,WebLogic 的多播 Socket 綁定/接收即會拋出 Socket closed 或 Invalid argument。
vi $DOMAIN_HOME/bin/startManagedWebLogic.sh
JAVA_OPTIONS="-Dweblogic.security.SSL.trustedCAKeyStore=... ${JAVA_OPTIONS}"
JAVA_OPTIONS="-Dweblogic.security.SSL.trustedCAKeyStore=... ${JAVA_OPTIONS} -Djava.net.preferIPv4Stack=true"
注意:雙引號包裹整體,參數以空格分隔,置於現有選項之後。
vi $DOMAIN_HOME/bin/setDomainEnv.sh
# 在 JAVA_OPTIONS 導出前添加
export JAVA_OPTIONS="${JAVA_OPTIONS} -Djava.net.preferIPv4Stack=true"
此法對域內所有伺服器(AdminServer + 所有 ManagedServer)生效,適合純 IPv4 環境。
# 檢查 IPv6 是否啟用
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
# 1=禁用, 0=啟用
# 臨時禁用 IPv6 (需重啟網路服務永久生效)
sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=1
# 永久禁用 (GRUB 內核參數)
# /etc/default/grub -> GRUB_CMDLINE_LINUX="... ipv6.disable=1"
# grub2-mkconfig -o /boot/grub2/grub.cfg
# reboot
建議優先用 JVM 參數解決,避免影響系統其他依賴 IPv6 的服務。
| 檢查項 | 命令/動作 | 預期結果 |
|---|---|---|
| 端口佔用 | netstat -tlnp | grep | 無衝突或屬於正確進程 |
| 域配置一致性 | 對比 config.xml 中 listen-address/listen-port | 與啟動參數、DNS/hosts 一致 |
| Node Manager 狀態 | ps -ef | grep NodeManager | 運行中,日誌無錯誤 |
| JVM 記憶體參數 | 檢查 USER_MEM_ARGS / JAVA_OPTIONS | -Xms/Xmx 合理,無 OOM 風險 |
| 日誌目錄權限 | ls -ld $DOMAIN_HOME/servers/ | 屬主為 weblogic 用戶,可寫 |

WebLogic 受管伺服器啟動故障 80% 集中於環境殘留與網路棧不匹配。建立「啟動前清理鎖檔、JVM 強制 IPv4、端口檢查、權限驗證」標準化運檢清單,可將故障恢復時間壓縮至分鐘級。配合 Node Manager 自動化管理,進一步提升叢集可用性與運維效率。