首页 > 其他分享 >性能测试-模拟oom场景

性能测试-模拟oom场景

时间:2023-03-04 14:45:30浏览次数:46  
标签:场景 java dump oom 内存 arthas jmap 模拟

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工具自己来分析

 

 

 

 

标签:场景,java,dump,oom,内存,arthas,jmap,模拟
From: https://www.cnblogs.com/shishibuwan/p/17178267.html

相关文章

  • 从Linq的Where方法理解泛型、委托应用场景
      最近遇到了一个问题,Linq的Where里面传递的是什么?Where的功能是什么实现的?没有第一时间答上来,在整理相关资料后决定自行实现Linq的Where方法来加深印象。什么是泛型......
  • 1223. 掷骰子模拟 (Hard)
    问题描述1223.掷骰子模拟(Hard)有一个骰子模拟器会每次投掷的时候生成一个1到6的随机数。不过我们在使用它时有个约束,就是使得投掷骰子时,连续掷出数字i的次数......
  • Java Agent场景性能测试分析优化经验分享
    摘要:本文将以Sermant的SpringBoot注册插件的性能测试及优化过程为例,分享在JavaAgent场景如何进行更好的性能测试优化及在JavaAgent下需要着重注意的性能陷阱。作者:栾文......
  • 手写模拟Spring底层原理-Bean的创建与获取
    作者:京东物流张鼎元1引言大家好,相信大家对Spring的底层原理都有一定的了解,这里我们会针对Spring底层原理,在海量的Spring源代码中进行抽丝剥茧手动实现一个Spring简易版......
  • C# - ConcurrentDictionary 并发场景使用注意事项
    1自身作为Enumerable的遍历自身作为可遍历对象,键值对为元素进行遍历,是线程安全的,但不提供快照,遍历过程中集合产生变更会直接反馈至此次遍历过程中。但并不一定能够保障......
  • 【算法设计-模拟】进制转换
    目录1.十进制转二进制2.十进制转r进制(2<=r<=37)3.将M进制数X转换为N进制数(2<=M,N<=37)1.十进制转二进制#include<stdio.h>#include<vector>usingnamespacestd;......
  • #yyds干货盘点#Hive中有多种类型的表?以及各个应用场景是什么
    Hive中有多种类型的表,根据数据存储的方式和管理方式的不同,可以分为以下几种类型:内部表(ManagedTable):数据存储在Hive数据仓库中,由Hive负责管理。CREATETABLEtable_name......
  • 数组模拟环形数列
        ......
  • 解读场景化视频制作工具的实现过程
    内容视频化正当其时,企业级智创工具创造新价值。全领域的内容视频化已是显性之势,其不仅覆盖传媒行业,更多泛行业正在以视频化内容的多元姿态创造新的商业价值。于是,不仅新......
  • pat乙级 1017 A除以B 模拟除法
    #include<stdio.h>#defineMAX_A1000intA[MAX_A];intB;/*除数*/intnum;/*A被除数有多少位*/voidread_AB();voiddivision_print();/*************......