温馨提示×

centos weblogic常见故障排除

小樊
54
2025-09-20 10:02:33
栏目: 智能运维

一、日志分析与故障定位
日志是排查WebLogic故障的核心依据,CentOS下WebLogic日志主要位于$DOMAIN_HOME/servers/server_name/logs目录,需重点关注以下文件:

  • server.log:记录服务器运行状态、错误堆栈及关键事件(如启动/关闭过程);
  • AdminServer.out:Admin服务器的标准输出/错误流,包含启动时的配置加载信息;
  • server_name.out:受管服务器的运行日志,反映业务处理中的异常。
    使用grep命令快速定位关键字(如“ERROR”“Exception”),例如grep -i "error" server.log,可快速提取错误信息。

二、常见故障及解决方法

1. WebLogic无法启动

典型症状:执行./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>)。
  • 清理缓存:删除服务器目录下的cachetmp文件夹(如$DOMAIN_HOME/servers/AdminServer/cache),这些文件夹中的.lock文件可能导致启动失败,清理后重启服务。

2. 连接数据库问题

典型症状:应用程序抛出“Cannot get connection from DataSource”“Connection timed out”等错误,或连接池监控显示“Waiting For Connection”数量持续增长。
排查步骤

  • 启用连接泄漏检测:在WebLogic控制台→ServicesJDBCConnection Pools→选择对应连接池→ConfigurationDiagnostics,开启“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)。

3. 内存不足(OutOfMemoryError)

典型症状:JVM抛出java.lang.OutOfMemoryError: Java heap spacejava.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(元空间大小)。

4. 端口冲突

典型症状:控制台无法访问(http://<服务器IP>:7001/console提示“无法连接”),或启动时提示“Address already in use”。
排查步骤

  • 检查端口占用:使用netstat -tulnp | grep 7001(或对应端口)查看占用进程,例如:
    tcp6   0   0 :::7001   :::*   LISTEN   1234/java
    
    表示PID为1234的Java进程占用了7001端口。
  • 解决冲突:若占用进程为WebLogic自身(如重启时未完全停止),使用kill -9 1234终止进程;若为其他应用程序(如Nginx、Tomcat),修改其配置文件更换端口,或修改WebLogic的config.xml中的ListenPort(如将7001改为8001)。

5. 节点管理器(Node Manager)无法启动

典型症状:执行./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生效。

6. SELinux导致的服务异常

典型症状:WebLogic无法启动、无法访问网络(如连接数据库失败),日志中提示“Permission denied”。
解决方法

  • 临时禁用SELinux:执行setenforce 0,将SELinux切换至宽容模式(不影响系统运行,仅关闭安全策略),测试是否解决问题。
  • 永久禁用SELinux:编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,重启服务器生效(注意:生产环境需谨慎操作,可能影响系统安全性)。

7. 系统资源不足

典型症状:服务器响应缓慢、WebLogic进程CPU使用率100%、内存耗尽(free -h显示内存不足)、磁盘空间耗尽(df -h显示根分区100%)。
排查步骤

  • 检查CPU使用率:使用top命令查看CPU占用最高的进程,若WebLogic进程占用过高,可能是线程死锁或代码性能问题,使用jstack <PID>获取线程转储,分析线程状态(如“BLOCKED”状态的线程)。
  • 检查内存使用:使用free -h查看内存剩余量,若内存不足,优化应用程序(如减少缓存大小)、增加物理内存,或调整WebLogic内存参数(如增大-Xmx)。
  • 检查磁盘空间:使用df -h查看各分区使用情况,若根分区(/)空间不足,清理无用文件(如/var/log下的旧日志、/tmp下的临时文件)。

0