OOM异常运维与Weblogic 调优

OOM异常运维与Weblogic 调优


一:背景
项目运行中,经常会出现程序挂起或 OOM 内存泄漏等情况
这个时候就需要运维人员快速定位问题,并为问题后续解决提供支持

二:现象
1.服务不能访问,网页报404错误

2.查看GC 状态

jstat -gc [进程号] 5000 20   --每5秒查看gc 查看20次

在这里插入图片描述

参数 含义
S0C 年轻代第一个survivor的容量(字节)
S1C 年轻代第二个survivor的容量(字节)
S0U 年轻代第一个survivor已使用的容量(字节)
S1U 年轻代第二个survivor已使用的容量(字节)
EC 年轻代中Eden的空间(字节)
EU 年代代中Eden已使用的空间(字节)
OC 老年代的容量(字节)
OU 老年代中已使用的空间(字节)
PC 永久代的容量
PU 永久代已使用的容量
YGC 从应用程序启动到采样时年轻代中GC的次数
YGCT 从应用程序启动到采样时年轻代中GC所使用的时间(单位:S)
FGC 从应用程序启动到采样时老年代中GC(FULL GC)的次数
FGCT 从应用程序启动到采样时老年代中GC所使用的时间(单位:S)

观察YGCT 和 FGCT 的次数变化,再进行GC 后,年轻代使用是否有变化,一般都是变小内存被回收,如果年轻代一直保持高位或者超出设定的值 一般就是内存溢出了

三:查错
1.查询程序日志 (业务报错,程序正常运行)

2.登录到WebLogic管理控制台 (线程异常,可查看线程堆栈信息)
导航到
服务器>监视>线程>转储线程堆栈

3.查看进程下线程号
ps -T -p <进程号>
SPID 为线程号,
根据线程号可直接去控制台查看转储线程堆栈 的具体信息

4.系统挂起,404异常,但未自动生成dump文件,无法访问了

jmap -heap [进程号] --查看整个JVM内存状态
jmap -dump:file=文件名.dump [进程号] --生成dump 文件(路径最好在空文件夹里)

5.查看weblogic 对jvm 内存的配置 是否配置过低
Linux 服务器路径:/home/…/Oracle/Middleware/user_projects/
domains/base_domain/bin/

setDomainEnv.sh 文件 中

四:分析dump 文件

dump 下载下来后,可以使用MAT 进行分析(eclipse 可以直接下载MAT 插件 或者直接使用MAT 客户端

1.模拟程序 OOM异常,并产生dump文件
2.eclipse 按照MAT 插件 或者 下载mat
单独的客户端
3.使用MAT 导入dump(会自动进行分析,
时间较长)
4.打开.hprof 文件,看查看分析结果
5.直接可以从饼图中看出内存占用过大
在这里插入图片描述
6.0xff1ca88 主线程 占用了96.78%,可以点Details 查看详情
在这里插入图片描述
7.详情里就可以看出哪个线程里哪里实例存在问题
在这里插入图片描述

五:weblogic JVM 参数调优
weblogic 安装使用,往往初始对JVM 参数的默认配置 往往不符合我们的日常需求
这就需要对参数进行调整

Linux 服务器路径:/home/…/Oracle/Middleware/user_projects/
domains/base_domain/bin/

setDomainEnv.sh 文件 中
搜索对应参数名 对数值进行修改

注意 if 判断,java的版本选择
如图 选择的是自定义的jdk版本(即else中的)

JVM 常用 调整参数
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sinat_34979884/article/details/122985222