一、日志分析与故障定位
日志是排查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
下的临时文件)。