CentOS 上 WebLogic 故障排查实操手册
一 快速定位与通用检查
- 确认进程与端口:使用 ps、top 确认 java 进程是否存在;用 ss 或 netstat 检查 7001(默认管理端口)是否监听,示例:ss -tulpen | grep 7001。若端口被占用,释放或调整 config.xml 的 ListenPort。
- 查看系统资源:用 free -m、df -h 检查内存与磁盘;iostat -x 1 检查磁盘 IO;必要时用 top/vmstat 观察 CPU 与负载。
- 防火墙与安全组:在 firewalld 放行端口,示例:firewall-cmd --zone=public --add-port=7001/tcp --permanent && firewall-cmd --reload;云主机需同步安全组规则。
- 控制台可达性:浏览器访问 http://服务器IP:7001/console 验证管理控制台是否可用。
- 快速重启与输出:进入域目录执行 nohup ./startWebLogic.sh > nohup.out 2>&1 &,便于事后分析启动日志。
二 日志分析与定位
- 日志位置与用途:
- 服务器日志:$DOMAIN_HOME/servers//logs/.log(启动/关闭、运行异常、部署事件)
- 域日志:$DOMAIN_HOME/servers/AdminServer/logs/.log(域内重要事件汇总)
- HTTP 访问日志:$DOMAIN_HOME/servers//logs/access.log(请求行、状态码、字节数)
- 常用检索:
- 实时跟踪:tail -f $DOMAIN_HOME/servers/AdminServer/logs/AdminServer.log
- 错误关键字:grep -i “ERROR|Exception” server.log | tail -50
- 时间窗检索:sed -n ‘/2025-11-14 10:/,/2025-11-14 11:/p’ server.log
- 访问异常统计:awk ‘{s[$9]++} END {for(i in s) print i,s[i]}’ access.log | sort -nr
- 控制台与 WLST:控制台路径“环境 → 服务器 → 日志记录”可在线调整日志级别与输出;WLST 可远程查看日志 MBean,示例:connect(‘weblogic’,‘密码’,‘t3://localhost:7001’);cd(‘/Servers/AdminServer/Log/AdminServer’);ls()。
三 常见故障场景与修复对照表
| 症状 |
快速检查 |
修复建议 |
| 访问控制台失败 |
ss -ltnp |
grep 7001;进程是否存活;防火墙/安全组是否放行 |
| 启动极慢或卡在初始化 |
日志长时间无进展 |
将 securerandom.source 改为 file:/dev/./urandom 以加速熵源初始化 |
| “Could not obtain the localhost address” |
hostname 解析 |
检查 /etc/hosts 与 /etc/hostname,确保本机名可解析到有效 IP |
| 端口被占用 |
ss -ltnp |
grep 7001;kill 旧进程或调整 ListenPort |
| 无法获取文件锁 .lok |
lsof |
grep .lok;确认无残留进程后删除锁文件再启 |
| 节点管理器无法启动(Invalid state file format) |
查看 nodemanager.log |
删除 nodemanager//data/*.state 后重启 NM |
| 受管服务器无法启动(WLS_DIAGNOSTICS*.DAT 异常) |
查看 SERVER.log |
删除 servers//data/store/diagnostics/WLS_DIAGNOSTICS.DAT* 后启动 |
| JDBC 连接失败 |
控制台测试连接 |
校验 JDBC URL/驱动/账号;检查数据库与监听可达性;优化连接池参数 |
| 部署/脚本执行超时 |
控制台是否有待激活变更 |
登录控制台激活或回退变更;必要时释放编辑锁 |
| 认证失败(boot.properties 或控制台) |
核对凭据文件与账号 |
在 servers/AdminServer/security/boot.properties 写入正确用户名/密码(首次启动后会被加密) |
四 JVM 与线程挂起诊断
- 获取进程号:ps -ef | grep weblogic(或 grep java)。
- 堆与 GC:jstat -gcutil 1000 10 观察 YGC/YGCT/FGC/FGCT;必要时开启 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps 获取 GC 细节。
- OOM 取证:在启动参数加入 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/dump.hprof;用 jmap -heap 查看堆概要;用 jstack -l 抓取线程栈。
- 线程与死锁:登录控制台“监视 → 线程”查看执行队列与阻塞线程;或用 jstack 导出线程栈分析是否存在死锁/长事务/资源等待。
- 临时提升日志级别:在控制台或 WLST 将相关模块日志级别调至 DEBUG,复现后回落,避免日志洪泛。
五 性能瓶颈与系统调优要点
- 操作系统与网络:合理设置 文件描述符上限(ulimit -n) 与 TCP/IP 参数;必要时优化 MTU/队列 等网络参数以减少连接开销与 TIME_WAIT 堆积。
- JVM 与内存:结合容量规划设置 -Xms/-Xmx,避免频繁 Full GC;根据负载选择并调优 垃圾回收器 与新生代/老年代比例。
- WebLogic 参数:依据 CPU 与并发量调整线程池与连接池;减少频繁标准输出/日志带来的 I/O 压力;按需启用本地 I/O 等特性。
- 数据库与 JDBC:优化 连接池大小、超时、验证查询;检查连接泄漏;对 SQL/索引/事务进行针对性优化,降低数据库成为瓶颈的概率。
- 应用层优化:使用 性能分析工具(如 JProbe/OptimizeIt)定位热点;减少会话持久化开销,优先 In-Memory Replication;精简会话数据、优化 JDBC 调用与对象生命周期管理。