首页 > 系统相关 >内存溢出的排查和定位

内存溢出的排查和定位

时间:2024-08-08 15:28:52浏览次数:16  
标签:文件 dump jvmTest util 排查 内存 溢出

内存溢出是一个面试时常问的问题,今天写个小栗子总结一下。

1.内存溢出的例子。

package org.example;
import java.util.ArrayList;
import java.util.List;


public class test2 {
    public static void main(String[] args) {
        List<jvmTest> list = new ArrayList<>();
        while (true) {
            list.add(new jvmTest()); // 不断创建对象,导致内存溢出
        }
    }
}

如上所示,jvmTest是我自定义的一个类,不断创建对象,最终会导致内存溢出。

2.导出dump文件。

在运行这个main方法的时候加几个参数,如图。

 具体参数为:

-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:/dump

这几个参数的意义为,设置JVM堆内存的初始大小和最大值,方便演示,设置内存溢出以后输出dump文件,指定生成的文件路径。

运行以后如图所示:

 

3.查看dump文件。

打开jdk目录bin目录下面的jvisualvm.exe,点击文件-》装入,打开生成的hprof文件。

 

 

 

 

 如图所示,可以直观的看到是jvmTest这个类占据了大部分内存。导致了内存溢出。

 

标签:文件,dump,jvmTest,util,排查,内存,溢出
From: https://www.cnblogs.com/anningkang/p/18349027

相关文章

  • Java内存管理
    任何平台的JVM管理内存的方式是相同的JVM如何管理内存:程序运行前,JVM会向操作系统申请一块内存,然后加载运行JAVA程序,如果不够,就继续申请新内存,直到运行成功或达到内存上限(默认64M)。内存会划分为几个逻辑区域堆占内存最多存放:对象,引用类型的数据,new创建的对象,只包含对象的......
  • new_d_array()函数接受一个int类型的参数和double类型的参数。该函数返回一个指针,指向
    /*下面是使用变参函数的一段程序:include<stdio.h>include<string.h>incude<stdarg.h>voidshow_array(constdoublear[],intn);double*new_d_array(intN,...);intmain(void){doublep1;doublep2;p1=new_d_array(5,1.2,2.3,3.4,4.5,5.6);p2=new_d_ar......
  • Android 是如何进行内存管理的
    目录1.垃圾回收(GarbageCollection)2.内存分配3.内存泄漏检测4.内存优化5.内存抖动(MemoryChurn)6.内存警告(MemoryWarning)7.内存分页(MemoryPaging)8.内存分段(MemorySegmentation)9.内存压缩(MemoryCompaction)10.内存分区(MemoryPartitionin......
  • 查看Linux某进程的物理内存大小
    如题,步骤如下1)ps命令查看某进程的PID2)通过/proc文件系统查看方法一查看/proc/[pid]/statm内存使用情况,以页为单位,每页4KB。每列含义分别为:虚拟内存、物理内存、共享内存、 文本、库、数据、脏页。$cat/proc/3092/statm1296470432201310上述结果表示PID=3092的......
  • 临时存储超限导致的Pod集体驱逐故障排查
    背景        在某天的下午,我们突然收到告警,埋点服务的接口报大量502,持续了大约2分钟,然后就自动恢复了,于是便开始排查问题所在。排查过程        在上面的故障现象中,我们首先怀疑是微服务出现了问题,因此进行了以下排查:    1.登录KubeSphere控制台后......
  • 使用dapper,因错误SQL字串拼接方式 导致的内存泄漏
    作者就职的公司在19年就开始使用.netcore并且部署到Linux上,这些年也遇到不少问题,有些问题都是使用土方法去解决,后面再慢慢写吧,准备将遇到的问题写成一个系列。 前情提要本次的项目是20年上线的储值卡系统,上线后发现内存缓慢增长(半个月涨到4G多),一直没有找到原因就让运维小伙伴......
  • [Java基础]内存泄漏和内存溢出
    在Java中,内存泄漏(MemoryLeak)和内存溢出(MemoryOverflow)是两种不同的内存管理问题。内存泄漏(MemoryLeak):内存泄漏指的是程序在运行过程中,因为某些原因导致不再使用的对象仍然被保留在内存中,无法被垃圾回收器回收。这些对象会占用内存空间,导致系统的可用内存不断减少,最终可......
  • 【JVM基础19】——实践-CPU飙高排查方案和思路?
    目录1-引言:2-⭐核心:2-1排查方案与思路3-小结:3-1如何排查CPU飙高问题?1-引言:CPU飙高指的是项目在运行过程中导致服务器的CPU内存占用较高。2-⭐核心:2-1排查方案与思路使用top命令查看占用CPU的情况top通过top命令查看后,可以查看是哪一个......
  • iOS开发-属性的内存管理
    Objective-C中,类的实例变量(instancevariables)和属性(properties)是两种不同的概念,其中属性的内存管理就较为复杂。Objective-C提供了多种属性修饰符,用于管理对象的内存。这些修饰符用于控制对象的生命周期和内存管理行为。以下是一些常见的属性修饰符及其内存管理行为的详细介绍:......
  • Python 循环引用与内存泄漏:深度解析
    Python循环引用与内存泄漏:深度解析在Python编程中,循环引用和内存泄漏是两个需要特别注意的问题。本文将深入探讨Python中的循环引用现象、其导致的内存泄漏问题,并提供详细的解决思路与方法。同时,我们还将分析一些常见场景,并分享扩展与高级技巧,帮助读者全面理解和应对这一......