一、什么是JVM,检测JVM的意义

JVM是java virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是闪现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够"一次编译,到处运行"的原因。

JVM支持与操作系统无关,实现跨平台,使得Java成为应用最广泛的语言之一。当网站规模逐渐扩大时,为了保证性能,很有必要进行JVM内存溢出的检测。

二、检测工具jconsole

jconsole是jdk自带的用于监控内存溢出的工具,该工具可以对本地代码进行监控,也可以远程连接服务器对JVM进行程序监控。jconsole监控内容包括内存、cpu、线程、类等,

本次根据实际工作需要,重点阐述jconsole远程连接服务器的步骤及注意项:

在jak的bin目录下打开Jconsole

填写远程服务器的IP地址和端口号,填写用户名、密码

经过一段时间等待成功连上服务器,概况页直观展示内存、线程、类、cpu曲线图

内存使用情况详细图示

线程使用情况详细图示

类使用情况详细图示

此外,还有"VM概要":显示包括连接名称、活动线程、堆大小、操作系统、物理内存等详细信息;"MBean":可对左侧目录的相关属性进行配置。

注:想对JConsole有更详尽的了解请参考该博客:https://blog.csdn.net/lifuxiangcaohui/article/details/36896199

三、jmap的应用

通过jconsole持续监控,如在某一时间点发现性能问题时,可通过jmap命令查看内存使用情况,输出重定向将文件导出来进行分析。输出重定向命令:JMap -dump:format=b;file='文件名(自定义)'  pid (程序的进程pid)

四、MAT工具分析

通过jmap命令将程序的内存使用情况文件导出来后,我们可以通过MAT对文件进行分析。

解压mat

点击mat文件夹中的MemoryAnalyzer启动

选择文件,点击打开 

因涉及到实际工作中java类名称等信息了,下面就不截图了。在页面中如果栈、堆的调用次数差别很大,需点击对象详情,分析对象调用情况。如果一个对象出现多次,说明是不正常的对象引用,GC不能回收,需要反馈给开发重点关注并优化。

注:该博客地址详细介绍了利用MAT进行内存泄漏分析https://blog.csdn.net/yxz329130952/article/details/50288145

至此,内存溢出检测告一段落,可以将文件和mat交于开发进行性能调优。另外,mat在加载文件时,在文件目录生成了xx_Leak_Suspects压缩包,解压压缩包可以通过浏览器打开直观查看分析报告。

五、总结

以上,就是JVM内存溢出检测的大体流程。等开发进行了性能调优,可以重复以上步骤,验证JVM性能。操作步骤如有不足,还请大家多多指教,谢谢!

浅析软件测试人员如何对JVM进行内存溢出检测的更多相关文章

  1. JVM:内存溢出OOM

    JVM:内存溢出OOM 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 经典错误 JVM 中常见的两个 OOM 错误 StackoverflowError:栈溢出 ...

  2. Java JVM:内存溢出(栈溢出,堆溢出,持久代溢出以及 nable to create native thread)

    转载自https://github.com/pzxwhc/MineKnowContainer/issues/25 包括:1. 栈溢出(StackOverflowError)2. 堆溢出(OutOfMe ...

  3. (转)JVM各种内存溢出是否产生dump

    对于java的内存溢出,如果配置-XX:+HeapDumpOnOutOfMemoryError,很明确的知道堆内存溢出时会生成dump文件.但永久代内存溢出不明确是否会生成,今天来做一个实验: 永久代 ...

  4. Java8虚拟机(JVM)内存溢出实战

    前言 相信很多JAVA中高级的同学在面试的时候会经常碰到一个面试题 你是如何在工作中对JVM调优和排查定位问题的? 事实上,如果用户量不大的情况下,在你的代码还算正常的情况下,在工作中除非真正碰到与J ...

  5. [JVM教程与调优] 了解JVM 堆内存溢出以及非堆内存溢出

    在上一章中我们介绍了JVM运行时参数以及jstat指令相关内容:[JVM教程与调优] 什么是JVM运行时参数?.下面我们来介绍一下jmap+MAT内存溢出. 首先我们来介绍一下下JVM的内存结构. J ...

  6. 对jvm虚拟机 内存溢出的思考

    java内存溢出:当新产生对象时,新生代空间不够,导致无法申请到足够的空间,报内存溢出 内存泄漏:一些静态集合,静态常量没有被gc清理,越来越多,占用内存,最后导致无法申请到新的空间

  7. JVM虚拟机内存溢出垃圾收集及类加载机制总结

    1.Java内存区域与内存溢出异常 虚拟机栈:为虚拟机执行Java方法服务 本地方法栈:为虚拟机使用到的native方法服务. Java堆:是Java虚拟机所管理的内存中最大的一块,被所有线程共享的一 ...

  8. JVM 发生内存溢出的 8 种原因、及解决办法

    阅读本文大概需要 2.3 分钟. 出处:割肉机 cnblogs.com/williamjie/p/11164572.html Java 堆空间 GC 开销超过限制 请求的数组大小超过虚拟机限制 Per ...

  9. 性能分析 | JVM发生内存溢出的8种原因及解决办法

    推荐阅读:史上最详细JVM与性能优化知识点综合整理 1.Java 堆空间 2.GC 开销超过限制 3.请求的数组大小超过虚拟机限制 4.Perm gen 空间 5.Metaspace 6.无法新建本机 ...

随机推荐

  1. 浅谈SSRF

    前言 最近主要是在思考考研的事.还是没想好-- 这几天的话写了一篇简单代审投稿了星盟,看了会SSRF.今天简单写下SSRF. 本文所有思路均来自互联网,并没有新想法.仅仅只是做个记录. 本文可能会有大 ...

  2. Logback自定义日志颜色

    片段 1 片段 2 LogbackColorful.java package cn.mrxionge.netdemo; import ch.qos.logback.classic.Level; imp ...

  3. 手把手教你ASP.NET Core:使用Entity Framework Core进行增删改查

    新建表Todo,如图 添加模型类 在"解决方案资源管理器"中,右键单击项目. 选择"添加" > "新建文件夹". 将文件夹命名为 Mo ...

  4. 学习fastapi middleware 源码调用顺序

    请求流程如图 本次学到的新东西: functools.partial 可以代码重用 用于在哪些通用的方法上加上更多的参数 try: finally可以当go的defer用 即使return后 fina ...

  5. 设计模式PDF下载了4.0万本!那,再肝一本《Java面经手册》吧!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 1. 先祝贺下自己拿下4.0万本下载量! <重学Java设计模式>PDF ...

  6. Java知识系统回顾整理01基础04操作符02关系操作符

    一.关系操作符 关系操作符:比较两个变量之间的关系  > 大于 >= 大于或等于 < 小于 <= 小于或等于 == 是否相等 != 是否不等 public class Hell ...

  7. opencv中namedWindow( )函数

    转自:https://blog.csdn.net/fanjiule/article/details/81606596 第一步,功能说明:namedWindow()的功能就是新建一个显示窗口.可以指定窗 ...

  8. golang拾遗:指针和接口

    这是本系列的第一篇文章,golang拾遗主要是用来记录一些遗忘了的.平时从没注意过的golang相关知识.想做本系列的契机其实是因为疫情闲着在家无聊,网上冲浪的时候发现了zhuihu上的go语言爱好者 ...

  9. JMeter实战(一) 体系结构

    此为开篇,介绍JMeter的组成结构,阅读后对JMeter形成整体认知和初步印象. 为了便于后续讲解,先明确下2个术语. 元件:如HTTP请求.事务控制器.响应断言,就是一个元件. 组件:如逻辑控制器 ...

  10. linux查看进程内存使用情况,以及将线程情况输出文件

    用jmap把进程内存使用情况dump到文件中,再用jhat分析查看.jmap进行dump命令格式如下: jmap -dump:format=b,file=/tmp/dump.dat 21711  -- ...