日志是故障排查的核心依据,需重点关注以下日志文件:
$DOMAIN_HOME/servers/<server_name>/logs/目录下,包括server.log(服务器运行日志)、access.log(HTTP访问日志)、config.xml修改日志等。tail -f /path/to/server.log实时追踪日志流,或通过grep、awk过滤关键字(如“ERROR”“Exception”)快速定位异常;也可使用journalctl -u weblogic(若WebLogic注册为systemd服务)查看系统级日志。systemctl status weblogic命令检查WebLogic服务是否处于“active (running)”状态;若未启动,可通过systemctl start weblogic启动服务。ps -ef | grep weblogic查看WebLogic相关进程(如java进程),确认进程是否存活;若进程不存在,需排查启动脚本或端口冲突问题。WebLogic默认使用7001(管理端口)、7002(SSL端口)等端口,端口冲突是常见启动失败原因:
netstat -tulnp | grep <端口号>或ss -tulnp | grep <端口号>命令,查看端口是否被其他进程(如Apache、Nginx)占用。kill -9 <PID>)或修改WebLogic端口配置(编辑$DOMAIN_HOME/config/config.xml中的<listen-port>标签)。配置文件错误(如config.xml格式错误、路径错误)会导致WebLogic无法启动或运行异常:
$DOMAIN_HOME/config/config.xml(域核心配置)、$DOMAIN_HOME/servers/<server_name>/config/startup.properties(启动属性)、boot.properties(启动认证文件)。xmllint --noout /path/to/config.xml检查XML格式是否正确;确认文件中的路径(如日志目录、域目录)是否存在且具有正确权限。资源不足(内存、CPU、磁盘空间)会导致WebLogic性能下降或崩溃:
top、htop或free -h命令查看系统内存使用情况(重点关注used/free比例),使用top查看CPU占用率(重点关注WebLogic进程的%CPU);若内存不足,需调整JVM参数(如-Xms、-Xmx)。df -h命令检查磁盘空间(尤其是日志目录所在分区),确保剩余空间大于20%。Java版本不兼容或JDK安装错误是常见问题:
java -version查看当前Java版本。JAVA_HOME环境变量是否指向正确JDK路径(echo $JAVA_HOME),并确保PATH中包含$JAVA_HOME/bin。权限不足或SELinux限制会导致文件访问失败、服务无法启动:
weblogic)对域目录($DOMAIN_HOME)、日志目录、应用目录具有读写权限(chown -R weblogic:weblogic /path/to/domain,chmod -R 775 /path/to/domain)。setenforce 0临时关闭SELinux,或通过semanage命令调整策略(如允许WebLogic端口访问)。线程死锁或阻塞会导致WebLogic挂起、响应缓慢:
jstack <PID>命令抓取WebLogic进程的线程堆栈(<PID>可通过ps -ef | grep weblogic获取),或使用weblogic.kernel.Default命令查看当前活动队列。jstack输出的线程堆栈,查找“deadlock”关键字或线程状态为“BLOCKED”的线程,定位死锁原因(如多个线程竞争同一资源);若存在死锁,需优化代码或调整资源分配。内存溢出(OutOfMemoryError)是WebLogic常见性能问题:
startWebLogic.sh)中添加-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump.hprof参数,当发生内存溢出时自动生成堆快照。jstat -gcutil <PID>监控堆内存(Eden、Survivor、Old区)和垃圾回收情况;使用jmap -heap <PID>查看内存分配详情;使用Eclipse MAT(Memory Analyzer Tool)分析堆快照,定位内存泄漏点(如未关闭的数据库连接、缓存未清理的对象)。http://<host>:7001/console登录管理控制台,查看服务器状态(如“Running”“Failed”)、部署应用的状态(如“Active”“Failed”)、性能指标(如CPU使用率、内存使用率、线程池状态)。connect()命令连接到管理服务器,使用serverRuntime()获取运行时数据。