一、日志分析與故障定位
日志是排查WebLogic故障的核心依據,CentOS下WebLogic日志主要位于$DOMAIN_HOME/servers/server_name/logs
目錄,需重點關注以下文件:
grep
命令快速定位關鍵字(如“ERROR”“Exception”),例如grep -i "error" server.log
,可快速提取錯誤信息。二、常見故障及解決方法
典型癥狀:執行./startWebLogic.sh
后無響應,或提示“Server failed to start”等錯誤。
排查步驟:
server.log
,常見原因包括配置文件錯誤(如config.xml
格式問題)、端口沖突、JDK版本不兼容(需匹配WebLogic要求的JDK版本,如1.8及以上)。netstat -tulnp | grep <端口號>
(如7001、7002)檢查端口是否被其他進程占用,若有沖突,修改config.xml
中的ListenPort
或終止占用進程(kill -9 <PID>
)。cache
、tmp
文件夾(如$DOMAIN_HOME/servers/AdminServer/cache
),這些文件夾中的.lock
文件可能導致啟動失敗,清理后重啟服務。典型癥狀:應用程序拋出“Cannot get connection from DataSource”“Connection timed out”等錯誤,或連接池監控顯示“Waiting For Connection”數量持續增長。
排查步驟:
Services
→JDBC
→Connection Pools
→選擇對應連接池→Configuration
→Diagnostics
,開啟“Enable Connection Leak Profiling”和“Enable Connection Profiling”,查看日志中是否有“A JDBC pool connection leak was detected”(泄漏的類名會在日志中標記)。Connection.close()
在finally
塊中調用;若連接不夠用,調整連接池參數:Maximum Capacity
(最大連接數,建議設置為峰值并發數的1.2倍)、Inactive Connection Timeout
(非活躍連接超時時間,默認100秒,可根據業務調整至300秒)、Test Reserved Connections
(啟用連接有效性測試,避免返回失效連接)。ping <數據庫IP>
),防火墻開放數據庫端口(如MySQL的3306、Oracle的1521)。典型癥狀:JVM拋出java.lang.OutOfMemoryError: Java heap space
或java.lang.OutOfMemoryError: Metaspace
,服務器響應緩慢或崩潰。
排查步驟:
startWebLogic.sh
,添加JVM參數-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump.hprof
,崩潰時會自動生成堆轉儲文件。jstat -gcutil <PID> 1000 10
(每1秒采樣1次,共10次)查看堆內存各區域(Eden、Survivor、Old)的使用率,若Old區使用率持續接近100%,說明存在內存泄漏;使用jmap -heap <PID>
查看堆內存分配詳情;使用MAT(Memory Analyzer Tool)分析堆轉儲文件,定位占用內存大的對象(如緩存未清理的大集合)。startWebLogic.sh
中的JVM參數,例如-Xms2048m -Xmx4096m
(初始堆2G,最大堆4G)、-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
(元空間大?。?。典型癥狀:控制臺無法訪問(http://<服務器IP>:7001/console
提示“無法連接”),或啟動時提示“Address already in use”。
排查步驟:
netstat -tulnp | grep 7001
(或對應端口)查看占用進程,例如:tcp6 0 0 :::7001 :::* LISTEN 1234/java
表示PID為1234的Java進程占用了7001端口。kill -9 1234
終止進程;若為其他應用程序(如Nginx、Tomcat),修改其配置文件更換端口,或修改WebLogic的config.xml
中的ListenPort
(如將7001改為8001)。典型癥狀:執行./startNodeManager.sh
后提示“Invalid state file format”或無法連接到節點管理器。
排查步驟:
$DOMAIN_HOME/servers/server_name/data/nodemanager/server_name.state
,刪除該文件后重新啟動節點管理器。$DOMAIN_HOME/nodemanager/nodemanager.properties
,確保ListenPort
(默認5556)未被占用,SecureListener
(是否啟用SSL)設置為false
(測試環境可關閉)。firewall-cmd --add-port=5556/tcp --permanent
開放節點管理器端口,然后firewall-cmd --reload
生效。典型癥狀:WebLogic無法啟動、無法訪問網絡(如連接數據庫失?。?,日志中提示“Permission denied”。
解決方法:
setenforce 0
,將SELinux切換至寬容模式(不影響系統運行,僅關閉安全策略),測試是否解決問題。/etc/selinux/config
,將SELINUX=enforcing
改為SELINUX=disabled
,重啟服務器生效(注意:生產環境需謹慎操作,可能影響系統安全性)。典型癥狀:服務器響應緩慢、WebLogic進程CPU使用率100%、內存耗盡(free -h
顯示內存不足)、磁盤空間耗盡(df -h
顯示根分區100%)。
排查步驟:
top
命令查看CPU占用最高的進程,若WebLogic進程占用過高,可能是線程死鎖或代碼性能問題,使用jstack <PID>
獲取線程轉儲,分析線程狀態(如“BLOCKED”狀態的線程)。free -h
查看內存剩余量,若內存不足,優化應用程序(如減少緩存大?。?、增加物理內存,或調整WebLogic內存參數(如增大-Xmx
)。df -h
查看各分區使用情況,若根分區(/
)空間不足,清理無用文件(如/var/log
下的舊日志、/tmp
下的臨時文件)。