一、优先收集故障基础信息
故障排查的第一步是明确故障现象,可通过以下方式快速收集关键信息:
systemctl status weblogic
命令确认WebLogic服务是否处于active (running)
状态;若未运行,尝试systemctl start weblogic
启动并观察启动日志。$DOMAIN_HOME/servers/<server_name>/logs/
目录下(如server.log
、diagnostics.log
),使用tail -f server.log
实时查看最新错误信息,或grep -i "error\|exception" server.log
过滤关键错误关键词(如OutOfMemoryError
、ClassNotFoundException
)。netstat -tulnp | grep <weblogic_port>
(如7001、5556)检查WebLogic监听端口是否处于LISTEN
状态;若端口未监听,可能是配置错误或进程未启动;若端口被占用,通过lsof -i:<port>
找到占用进程并终止(kill -9 <pid>
)。二、常见故障类型及针对性解决步骤
weblogic
)对$DOMAIN_HOME
及子目录有读写权限,使用chown -R weblogic:bea $DOMAIN_HOME
修复权限;若用root
启动过,需彻底清理残留进程(ps -ef | grep weblogic | awk '{print $2}' | xargs kill -9
)并重新以weblogic
用户启动。Address already in use
,通过netstat -an | grep <port>
找到占用进程,终止冲突进程或修改$DOMAIN_HOME/config/config.xml
中的ListenPort
(如将7001改为7002),重启服务。java -version
检查JDK版本;若版本不符,下载并安装正确版本的JDK,设置JAVA_HOME
环境变量(export JAVA_HOME=/usr/java/jdk1.8.0_391
)并更新$DOMAIN_HOME/bin/setDomainEnv.sh
中的JAVA_HOME
路径。OutOfMemoryError
,调整JVM内存参数(-Xms
初始堆大小、-Xmx
最大堆大小),建议设置为相同值以减少GC频率(如-Xms1024m -Xmx1024m
),修改$DOMAIN_HOME/bin/startWebLogic.sh
中的JAVA_OPTIONS
参数。firewall-cmd --list-ports
检查防火墙是否开放WebLogic端口(如7001),若未开放,执行firewall-cmd --add-port=7001/tcp --permanent
添加规则,然后firewall-cmd --reload
生效;若使用iptables
,执行iptables -A INPUT -p tcp --dport 7001 -j ACCEPT
并保存规则(service iptables save
)。systemctl status nodemanager
),确保节点管理器运行;若节点管理器日志($DOMAIN_HOME/servers/<server_name>/data/nodemanager/nodemanager.log
)中出现Invalid state file format
,删除nodemanager.state
文件(rm -f $DOMAIN_HOME/servers/<server_name>/data/nodemanager/nodemanager.state
)并重启节点管理器。$DOMAIN_HOME/servers/<server_name>/logs/deployments/
目录下的部署日志(如<app_name>.log
),定位部署失败原因(如DeploymentException
、ClassNotFoundException
)。WEB-INF/lib
目录或WebLogic的lib
目录($DOMAIN_HOME/lib
)。web.xml
或weblogic.xml
配置文件,确保上下文路径(context-root
)、数据源引用等配置正确;若应用引用了外部数据源,确认数据源已正确配置并启动。top
命令查看CPU使用率(关注%CPU
高的进程)、free -h
查看内存使用情况(关注available
内存)、df -h
查看磁盘空间(确保/
分区有足够空间)。http://<host>:7001/console
),导航至Monitoring -> Performance
,查看线程池(ExecuteThreadTotalCPUUsage
)、JVM内存(HeapMemoryUsage
)、连接池(ExecuteThreadTotalRequests
)等指标,若线程池活跃线程数接近最大值(ExecuteThreadMax
),调整线程池大小(增加ExecuteThreadMax
参数);若JVM堆内存使用率超过80%,调整-Xmx
参数(如从1024m增加到2048m)。jstack <pid>
获取线程堆栈,分析是否有线程死锁(deadlock
关键词);使用jmap -histo:live <pid>
查看堆内存中的对象分布,定位内存泄漏(如大量byte[]
或String
对象);使用VisualVM
或JProfiler
进行更深入的性能分析(如方法调用耗时、内存分配情况)。三、后续优化与预防措施
$DOMAIN_HOME/config
目录下的配置文件(如config.xml
、boot.properties
),避免配置丢失。logrotate
),避免日志文件过大占用磁盘空间(如每天生成一个日志文件,保留30天)。