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