性能测试-内存-模拟oom场景

 

正文

1、模拟环境搭建

1.1 tomcat下载与搭建

下载地址:https://tomcat.apache.org/download-90.cgi

 

 

 1.2 解压安装

cd /data/jvmpretest

# 解压
tar -zxvf apache-tomcat-9.0.73.tar.gz

1.3Jvmpertest.war 丢到webapps文件夹下

修改堆栈信息,让其很快抛出异常:

catalina.sh
`JAVA_OPTS="-Xms256m -Xmx256m -Xmn128m"`

 启动tomcat

1.4jmeter调用

jmeter调用: http://ip:8080/JvmPertest/pertest1
 设置性能场景进行调用,报错

 

 

 2.oom现象

确定oom问题现象:

  • 响应信息:看请求的响应信息,如上图, 一般的情况下,出现内存溢出问题,在响应信息中都会有所体现`nested exception is java.lang.OutOfMemoryError: Java heap space`
  • 项目日志:有些项目,在log日志中,会有体现,但也不一定有
  • 系统内存:我们看 系统的 内存,发现内存并没有被完全消耗掉,因为只是占用了分配的内存大小,free没减少多少,但是内存本来是2.5,压测停止后内存是2.2,之后一直没有释放,这种就要想到内存泄漏,从而导致内存溢出
  • 这个问题,网络通,比一定会死,服务也不一定会停,进程一直可能都在,但是也有可能运行命令./stop也不一定可以把进程停止,直到用kill -9 强制停止

 

 

 系统内存并没有减少多少,只是占用了分配的内存大小,但是接口运行结束后,一直没释放内存,就会导致内存泄漏,从而内存溢出

 

 

 

 3.oom分析-jmap

 

 

 

 

 

命令:imap[options] pid

  • -dump:生成java堆栈的快照信息
  • -heap:显示java堆详细信息,使用哪种回收机制、参数配置、分代情况
  • -histo:显示堆中对象统计信息,包括类、实例数量
  • jmap -F -dump:format=b,file=文件名bin 进程id ===执行时间比较长,需要等待结束jmap -F -dump:live,format=bfile=jvmpertest110901.bin 3636

定位这个问题步骤:

  • 1、生成内存溢出堆栈文件
获得进程id `ps -ef |grep java` `jps`
`jmap -dump:live,format=b,file=heap_jvmpertest_20210811002.hprof 2419`

或者方法2:arthas
curl -O https://arthas.aliyun.com/arthas-boot.jar
启动: `java -jar arthas-boot.jar pid`
`heapdump` ,在出现内存溢出的错误是,执行这个命令,可以直接下载heapdump信息

heapdump-出现

  • 2、解析堆栈文件-MAT

解压MemoryAnalyer工具
打开工具,open hprof文件
点击 histogram
没有java基础的同学, hprof文件给开发去定位, 有基础的同学,mat工具自己来分析

 

 

 

 

posted @   依羽杉  阅读(426)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2020-03-04 postman接口测试笔记-随机数,默认断言方法,监控,参数化等
点击右上角即可分享
微信分享提示