内存泄露案例分析

内存泄漏案例分析

一.环境配置

1.创建jmter脚本

Ip:10.196.130.103

Port:8082

url:/pinter/case/memory

query: userName=admin&password=1234

2.jmeter添加监控三方插件

下载地址:http://jmeter-plugins.org/downloads/all

Jar包放jmeter中lib/ext目录

下载插件:

3 Basic Graph:windows下可用的实时tps和响应时间的插件

Custom JMeter Functions

Random CSV Data Set Config

PerfMon :服务端性能实时监控插件

二.监控工具

1.jmeter工具

2.jstat命令

Jstat –gcutil 72800 100

3.jvisualvm工具

三.内存泄漏表现

1.现象一:通过jmeter插件可以看到,tps一直下降,RT一直上升

Tps逐渐下降,降至0

Rt相应时间一直上升

2.现象二:通过jstat查看,old老年代一直是100%,fgc次数一直上涨

Old老年代一直处于100%

Fugc一直上涨

3.现象三:Jvisualvm内存一直上涨,最后变成一条曲线

四.判断是否为内存泄漏

查看日志是否有内存溢出OutOfMemoryError的报错

cd /usr/src/tomcat-pinter/logs

tail -100 catalina.out

五.排查思路

1.可以忽略的对象:

数据类型相关的不用管:[B Byte [C Char [I int

Java开头的不用管:属于底层对象

2.重点关注的对象:

业务相关:一般以com/cn开头

框架相关:org开头三方框架

六、定位问题方法

1.通过jmap命令定位问题

通过jmap命令打印出暂用内存前30的对象

Jmap –histo 72800 | head -30

2通过jvisualvm工具定位问题

2.1点击堆dump下载到服务器显示的目录

2.2在远程服务器给对应的文件授权

chmod 777 /usr/src/tomcat-pinter/temp/heapdump-1671609652793.hprof

2.3下载文件到桌面

2.4.通过jvisualvm打开文件

右上角文件-装入-堆-文件

2.5.定位问题

通过大小排序查看

七、源码分析

1.根据打印的路径找到项目对应的目录

2.通过sz或者ftxp下载到本地

3.利用jd.gui工具查看源码

Jd.gui官网地址:http://java-decompiler.github.io/

4.分析源码

代码逻辑问题:每次有用户登录,就会去写入session,没有判断用户已经登录,存在session数据

posted @ 2023-07-11 09:25  常疯大虾  阅读(106)  评论(0编辑  收藏  举报