温馨提示×

Linux上WebLogic故障排查方法

小樊
43
2025-10-29 04:56:51
栏目: 智能运维

Linux环境下WebLogic故障排查方法

1. 日志分析与定位

日志是故障排查的核心依据,需优先收集并分析WebLogic各类日志文件:

  • 日志位置:Domain日志通常位于DOMAIN_HOME/logs/domain.log,Server日志位于DOMAIN_HOME/servers/<server_name>/logs/server.log,HTTP访问日志位于DOMAIN_HOME/servers/<server_name>/logs/access.log
  • 查看方法:使用tail -f server.log实时跟踪最新日志,或通过grep "ERROR" server.log过滤错误信息,重点关注OutOfMemoryError(内存溢出)、ClassCastException(类转换异常)、SQLException(数据库连接异常)等关键字。

2. 系统资源监控

资源不足是WebLogic故障的常见诱因,需通过以下命令监控系统状态:

  • 进程与CPUps -ef | grep weblogic确认WebLogic进程是否运行;top查看CPU使用率,若某进程占用过高(如超过80%),需进一步分析是否为WebLogic进程。
  • 内存与磁盘free -h查看内存剩余空间(需预留1/3以上给系统);df -h检查磁盘空间(根分区剩余空间建议大于10GB),避免因磁盘满导致日志无法写入或应用崩溃。
  • 网络与端口netstat -tulnp | grep <port>(如7001、7002)检查WebLogic监听端口是否被占用;ping <目标IP>测试网络连通性;iptables -L查看防火墙规则,确保所需端口开放。

3. 配置文件验证

配置错误会导致WebLogic无法正常启动或运行,需重点检查以下文件:

  • config.xml:位于DOMAIN_HOME/config/,确认<server><listener><data-source>等配置项的正确性(如数据库连接字符串、监听端口),避免拼写错误或缺失。
  • 启动脚本startWebLogic.shsetDomainEnv.sh,检查JVM内存参数(-Xms初始堆大小、-Xmx最大堆大小,建议设置为相同值避免频繁扩容)、JDK路径(JAVA_HOME需指向兼容版本,如WebLogic 12c需Java 8及以上)。

4. 内存问题排查与优化

内存溢出(OutOfMemoryError)是WebLogic高频故障,需通过以下步骤解决:

  • 参数调整:在setDomainEnv.sh中增加永久代(方法区)大小(如-XX:MaxPermSize=512m,适用于Java 7及以下;Java 8及以上需调整为-XX:MaxMetaspaceSize=512m),或扩大堆内存(-Xms1024m -Xmx2048m)。
  • 堆转储分析:在启动脚本中添加-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump.hprof,当内存溢出时自动生成堆快照;使用jmap -heap <pid>查看内存分配情况,通过MAT(Memory Analyzer)工具分析堆转储,定位内存泄漏点(如未关闭的数据库连接、缓存未清理的对象)。

5. 线程问题诊断

线程死锁或阻塞会导致WebLogic响应缓慢甚至挂起,需通过以下方法排查:

  • 线程转储:使用jstack <pid> > thread_dump.log抓取故障时刻的线程转储;或通过WebLogic管理控制台(http://<host>:<port>/console)→“服务器”→“监控”→“线程”查看线程状态。
  • 分析转储:使用grep "deadlock" thread_dump.log查找死锁信息;或通过VisualVM、JConsole等工具分析线程堆栈,重点关注BLOCKED状态的线程,定位资源争用点(如同一数据库连接被多个线程占用)。

6. 权限与用户检查

权限问题会导致WebLogic无法访问资源或启动失败,需确认:

  • 启动用户:避免使用root用户启动WebLogic(可能导致权限继承问题),建议使用专用用户(如weblogic);通过whoami命令确认当前用户。
  • 文件权限:确保WebLogic安装目录、日志目录、域目录的权限正确(如chown -R weblogic:weblogic /path/to/weblogic),避免因权限不足导致无法写入日志或读取配置文件。

7. 常见特定错误处理

  • bea-000386(服务器子系统失败):通常与网络配置有关,检查nohup.out日志中的详细信息,确认网络连接是否正常。
  • Jar包冲突:若启动时报ClassCastExceptionNoClassDefFoundError,需检查应用依赖的jar包是否与WebLogic自带的jar包冲突(如javax.servlet包),删除应用中的重复jar包。

0