如何在Ubuntu上通过WebLogic快速排查并解决系统故障的问题?
- 内容介绍
- 文章标签
- 相关推荐
:Ubuntu 上 WebLogic 故障让人抓狂的痛点
WebLogic 在 Ubuntu 上出现启动失败、访问超时或频繁异常时往往会让运维人员陷入以下困境:
- 日志散落不明。找不到关键错误信息,浪费大量时间在无谓的 grep 中。
- 端口被占用导致服务无法启动,却不知哪个进程在“捣乱”。
- JVM 堆内存、垃圾回收参数调错。要么频繁 Full GC,要么直接 OOM。
- 磁盘被日志塞满。程序性能骤降,却又怕误删关键排查线索。不过,
- 安装或部署阶段 JDK 配置错漏、boot.properties 泄露。认证总是失败,
针对这些痛点,下面提供一套快速定位 → 高效修复 → 防御预防的实战教程。
一、快速定位与日志分析
1. 确认域目录与日志位置
先通过环境变量定位域根目录:
$ echo $DOMAIN_HOME
# 例如返回 /opt/weblogic/user_projects/domains/base_domain
所有主要日志集中在 $DOMAIN_HOME/logs 目录下:
-
server.log:服务器启动、运行及错误信息。 -
access.log:HTTP 请求访问日志,用于排查请求响应问题。 -
{ManagedServer}.log / stdout.log / stderr.log:各托管服务器的独立输出。 -
diagnostic.log:WebLogic 自身诊断信息。
2. 常用日志检索命令
$ tail -f $DOMAIN_HOME/logs/server.log # 动态跟踪最新日志
$ grep -i -E 'error|exception|fail' $DOMAIN_HOME/logs/server.log # 错误关键字过滤
$ less $DOMAIN_HOME/logs/server.log # 分页回溯上下文
$ awk '/ERROR/{print NR。$0}' $DOMAIN_HOME/logs/server.log | head -20 # 错误行号+内容
3. 检查控制台与启动脚本输出
如果页面打不开或服务卡住先看控制台日志:
$ tail -f $DOMAIN_HOME/servers/AdminServer/logs/AdminServer.log
$ tail -f $DOMAIN_HOME/servers/AdminServer/logs/AdminServer.out
$ ps -ef | grep weblogic # 查看进程是否真的起来了
1. 端口冲突导致启动失败
痛点:服务明明已经启动却无法访问,端口被占用却找不到罪魁祸首。不过,
-
检查占用情况这方面。
$ ss -ltnp | grep :7001 # 或 netstat -tulnp | grep :7001 $ lsof -i :7001 - - 若是其他 WebLogic 实例或其它应用占用: – 停掉冲突进程或修改该实例的监听端口。- 若是程序服务误占用:调整程序服务或使用防火墙放行后更换临时端口验证。
-
- 验证防火墙:
$ sudo ufw status # Ubuntu 默认防火墙 $ sudo ufw allow 7001/tcp # 放行所需端口
2. JVM 堆内存/垃圾回收不当导致 OOM 或频繁 Full GC
痛点:调了一堆-Xms/-Xmx 参数仍然内存飙升,甚至直接崩溃。
-
- 查看当前启动参数:
$ ps -ef | grep java | grep weblogic # 输出类似:java -Xms2g -Xmx4g ... weblogic.Server - - 基础调优建议: – 初始堆大小 建议设为最大堆大小 的 **50%~70%**;– 新生代 不超过堆大小的 **1/3**;– 垃圾回收器选择: · 对于吞吐量优先可使用 **ParallelGC**;· 对于低延迟敏感场景尝试 **G1GC**。
-
- 开启 GC 日志便于事后分析:
-Xlog:gc*:file=$DOMAIN_HOME/logs/gc.log:time,tags:filecount=5。filesize=10M - - 若出现 `java.lang.OutOfMemoryError: Java heap space`: – 加大 `-Xmx`;若仍不行则检查是否存在内存泄漏。其实,
- - 若出现 `java.lang.StackOverflowError`: – 调整栈大小 `-Xss`或检查递归深度。
3. 身份验证失败
痛点:启动卡在 “Auntication denied”,却不知道哪里写错密码了。
-
- 检查 `
/servers/ /security/boot.properties` 内容是否为明文且正确。若加密过则需要重新生成: $ java weblogic.security.internalencryption.ClearOrEncryptedService \ encrypt {plain_password}> boot.properties.temp # 把生成的内容替换原文件中的 password 行
4. 部署描述符错误或类方法缺失
-
- 查看 `server.log` 中类似 `Deployment descriptor error:`、`ClassNotFoundException:`、`NoSuchMethodError:` 的堆栈。– 对应方法:确认应用的 `weblogic.xml`。`web.xml`,`application.xml` 没有语法错误;检查所依赖的 jar 是否放在正确的库目录 或全局共享库。– 清理缓存后重新部署:
bash
rm -rf $DOMAIN_HOME/servers/
/tmp/* rm -rf $DOMAIN_HOME/servers/ /cache/*
痛点:日志文件一天天增长。磁盘告警频繁,又怕删错影响后续排查。说起来,
-
- 配置 logrotate:创建
/etc/logrotate.d/weblogicconf /OPT/WebLogic/user_projects/domains/*/logs/*.log { daily # 每天轮转 rotate 7 # 保留最近7天 compress # gzip 压缩旧日志 missingok # 日志不存在也不报错 notifempty # 空文件不轮转 create 640 weblogic weblogic # 新建文件权限和所属使用者组 sharedscripts # 脚本只执行一次 postrotate # 向管理员发送通知邮件或触发告警程序 logger "WebLogic logs rotated" endscript }shell
sudo logrotate -f /etc/logrotate.d/weblogic # 测试立即生效
$DOMAIN_HOME/config/config.xml 中适当降低某些模块的日志级别。例如把 false/ 或将特定 logger 的 severity 改为 Warning。
step‑by‑step 操作流程
注意每一步完成后记录结果,便于后续升级或交给值班同事。
:Ubuntu 上 WebLogic 故障让人抓狂的痛点
WebLogic 在 Ubuntu 上出现启动失败、访问超时或频繁异常时往往会让运维人员陷入以下困境:
- 日志散落不明。找不到关键错误信息,浪费大量时间在无谓的 grep 中。
- 端口被占用导致服务无法启动,却不知哪个进程在“捣乱”。
- JVM 堆内存、垃圾回收参数调错。要么频繁 Full GC,要么直接 OOM。
- 磁盘被日志塞满。程序性能骤降,却又怕误删关键排查线索。不过,
- 安装或部署阶段 JDK 配置错漏、boot.properties 泄露。认证总是失败,
针对这些痛点,下面提供一套快速定位 → 高效修复 → 防御预防的实战教程。
一、快速定位与日志分析
1. 确认域目录与日志位置
先通过环境变量定位域根目录:
$ echo $DOMAIN_HOME
# 例如返回 /opt/weblogic/user_projects/domains/base_domain
所有主要日志集中在 $DOMAIN_HOME/logs 目录下:
-
server.log:服务器启动、运行及错误信息。 -
access.log:HTTP 请求访问日志,用于排查请求响应问题。 -
{ManagedServer}.log / stdout.log / stderr.log:各托管服务器的独立输出。 -
diagnostic.log:WebLogic 自身诊断信息。
2. 常用日志检索命令
$ tail -f $DOMAIN_HOME/logs/server.log # 动态跟踪最新日志
$ grep -i -E 'error|exception|fail' $DOMAIN_HOME/logs/server.log # 错误关键字过滤
$ less $DOMAIN_HOME/logs/server.log # 分页回溯上下文
$ awk '/ERROR/{print NR。$0}' $DOMAIN_HOME/logs/server.log | head -20 # 错误行号+内容
3. 检查控制台与启动脚本输出
如果页面打不开或服务卡住先看控制台日志:
$ tail -f $DOMAIN_HOME/servers/AdminServer/logs/AdminServer.log
$ tail -f $DOMAIN_HOME/servers/AdminServer/logs/AdminServer.out
$ ps -ef | grep weblogic # 查看进程是否真的起来了
1. 端口冲突导致启动失败
痛点:服务明明已经启动却无法访问,端口被占用却找不到罪魁祸首。不过,
-
检查占用情况这方面。
$ ss -ltnp | grep :7001 # 或 netstat -tulnp | grep :7001 $ lsof -i :7001 - - 若是其他 WebLogic 实例或其它应用占用: – 停掉冲突进程或修改该实例的监听端口。- 若是程序服务误占用:调整程序服务或使用防火墙放行后更换临时端口验证。
-
- 验证防火墙:
$ sudo ufw status # Ubuntu 默认防火墙 $ sudo ufw allow 7001/tcp # 放行所需端口
2. JVM 堆内存/垃圾回收不当导致 OOM 或频繁 Full GC
痛点:调了一堆-Xms/-Xmx 参数仍然内存飙升,甚至直接崩溃。
-
- 查看当前启动参数:
$ ps -ef | grep java | grep weblogic # 输出类似:java -Xms2g -Xmx4g ... weblogic.Server - - 基础调优建议: – 初始堆大小 建议设为最大堆大小 的 **50%~70%**;– 新生代 不超过堆大小的 **1/3**;– 垃圾回收器选择: · 对于吞吐量优先可使用 **ParallelGC**;· 对于低延迟敏感场景尝试 **G1GC**。
-
- 开启 GC 日志便于事后分析:
-Xlog:gc*:file=$DOMAIN_HOME/logs/gc.log:time,tags:filecount=5。filesize=10M - - 若出现 `java.lang.OutOfMemoryError: Java heap space`: – 加大 `-Xmx`;若仍不行则检查是否存在内存泄漏。其实,
- - 若出现 `java.lang.StackOverflowError`: – 调整栈大小 `-Xss`或检查递归深度。
3. 身份验证失败
痛点:启动卡在 “Auntication denied”,却不知道哪里写错密码了。
-
- 检查 `
/servers/ /security/boot.properties` 内容是否为明文且正确。若加密过则需要重新生成: $ java weblogic.security.internalencryption.ClearOrEncryptedService \ encrypt {plain_password}> boot.properties.temp # 把生成的内容替换原文件中的 password 行
4. 部署描述符错误或类方法缺失
-
- 查看 `server.log` 中类似 `Deployment descriptor error:`、`ClassNotFoundException:`、`NoSuchMethodError:` 的堆栈。– 对应方法:确认应用的 `weblogic.xml`。`web.xml`,`application.xml` 没有语法错误;检查所依赖的 jar 是否放在正确的库目录 或全局共享库。– 清理缓存后重新部署:
bash
rm -rf $DOMAIN_HOME/servers/
/tmp/* rm -rf $DOMAIN_HOME/servers/ /cache/*
痛点:日志文件一天天增长。磁盘告警频繁,又怕删错影响后续排查。说起来,
-
- 配置 logrotate:创建
/etc/logrotate.d/weblogicconf /OPT/WebLogic/user_projects/domains/*/logs/*.log { daily # 每天轮转 rotate 7 # 保留最近7天 compress # gzip 压缩旧日志 missingok # 日志不存在也不报错 notifempty # 空文件不轮转 create 640 weblogic weblogic # 新建文件权限和所属使用者组 sharedscripts # 脚本只执行一次 postrotate # 向管理员发送通知邮件或触发告警程序 logger "WebLogic logs rotated" endscript }shell
sudo logrotate -f /etc/logrotate.d/weblogic # 测试立即生效
$DOMAIN_HOME/config/config.xml 中适当降低某些模块的日志级别。例如把 false/ 或将特定 logger 的 severity 改为 Warning。
step‑by‑step 操作流程
注意每一步完成后记录结果,便于后续升级或交给值班同事。

