首页 > 系统相关 >性能测试内存溢出bug的定位和分析【杭州多测师】【杭州多测师_王sir】

性能测试内存溢出bug的定位和分析【杭州多测师】【杭州多测师_王sir】

时间:2022-10-04 11:23:34浏览次数:61  
标签:sir 多测师 对象 回收 session user 20 杭州

1、通过jmeter -n -t case.jmx在服务器端设置20个并发和持续300秒进行压测

2、通过jstat -gcutil 进程号 命令来监控服务器年轻代、老年代、新生代的垃圾回收情况

3、发现年轻代的S0和S1一直在处于交换的情况、O老年代一直处于上升的过程、后续新生代回收的频率越来越快、最终基本上都达到100%

4、通过在Linux端用jmap histo 进程号|head -20 命令查看垃圾回收最频繁的前20个对象发现User类、char[]、byte[]、Session类的这几个对象占用了差不多80多兆

因为堆内存总共设置的为256M

5、在桌面下载一个Java的反编译工具JD-gui然后从服务器上面部署的项目中找到User类对应的class文件、拖动到jd-gui工具里面发现每次发接口请求的

时候都会通过HttpSession session = request.getSession()创建一个session对象、还有每次去判断的时候如果没有用户会重新创建一个用户放在list集合里面

这样就导致session里面存了很多个user对象有几十万个

6、而且session对象还不能被jvm进行垃圾回收、因为session对象是比较特殊的

 

 

 7、session类不能被回收、但是user是存在session里面的、session不能被回收导致user也不能被回收、出现了逻辑上的错误

8、然后去Tomcat看日志已经出现了:sessionStatMap is full和outofmemory的错误

9、解决的办法就是改一下代码:

当session中已经有这个用户的时候、就不要再往session中添加这个用户

 

标签:sir,多测师,对象,回收,session,user,20,杭州
From: https://www.cnblogs.com/xiaoshubass/p/16753471.html

相关文章

  • 程序、进程和线程 Java多线程的状态【杭州多测师】【杭州多测师_王sir】
    CPU是以时间片的方式为进程分配CUP处理时间的,如果当一个进程同时要完成几件事的时候,如当从网上下载文件的时候,需要一边下载一边显示进度而且还要一边保存,如果按照单线程的......
  • 肖sir__Java中模块__11
       一、random模块1、定义 random :用于产生一个随机数2、使用步骤:(1)导包(2)创建对象(3)获取随机数   案例:   importjava.util.Random;......
  • docker compose部署项目【杭州多测师_王sir】【杭州多测师】
    1、把Apache-jmeter和docker-compose.yml文件2、dockerfile-项目名称-agent3、dockerfile-项目名称-demo4、项目名称-agent.jar和项目名称-demo.jar文件都放在同一个目......
  • 肖sir__notepad++ __安装
     1、下载_notepad++安装包   2、安装步骤  3、运行(1)打开notepad++,设置====首选项====新建====默认语言java===ansi(编码)   (2)新建一个java文件a......
  • 肖sir___第二个月JSP__08
    1.1JSP简介JSP(全称JavaServerPages)是由SunMicrosystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生......
  • 肖sir___第二个月Cookie&Session__07
    1.1web应用会话技术什么叫会话技术?简而言之,保存在一次网络交互过程中临时产生的数据为什么要诞生会话技术?因为Web应用程序是使用HTTP协议传输数据的,而HTTP协议是一个......
  • 肖sir___第二个月Servlet__07
    1.1Servlet简介Servlet是什么?Servlet(ServerApplet)是JavaServlet的简称称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在......
  • 肖sir___第二个月Tomcat服务器_06
    1.1HTTP协议http是一个简单的请求-响应协议它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。HTTP协议是基于C/S架构进行通信的,而HTTP协议的服务器端......
  • 肖sir___第二个月JQuery_05
    JQuery 什么是jQuery?jQuery是一个JavaScript函数库。jQuery是一个轻量级的"写的少,做的多"的JavaScript库。jQuery库包含以下功能:HTML元素选取HTML元素操作CS......
  • 肖sir___第二个月Javascript_04
    1.1JavaScript简介JavaScript是互联网上最流行的脚本语言,这门语言可用于HTML和web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备JavaScript是......