jvm优化之:OOM(out of memory)内存溢出

内存溢出

 注意内存溢出不是内存泄漏!!这里主要是介绍如何用jdk自带的jmap工具导出进程堆空间快照。
  1. 内存溢出
    Out Of Memory,是指申请的堆内存空间不够用了,比如:你申请了10M空间,但是你要放12M的东西进去;

  2. 内存泄漏
    Memory Leak,是指你的堆空间一直有对象不能被GC清理掉,但是你还要放对象进去,还在向堆申请放对象的空间,此时就会报 Memory Leak。

  3. 这里主要演示内存溢出 : 模拟代码

package com.distributed.lock.utils;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;/**1. -Xms30m -Xmx=30m -XX:SurvivorRatio=8 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:\99.hprof2. 模拟OOM*/
public class OOMTest {public static void main(String[] args) {System.out.println("演示开始:>>>>>>>>>>>>>>>>>>>>>>>>>>>");//先向堆空间申请一块内存区域,区域的大小默认是ArrayList的长度List<int[]> arr = new ArrayList<>(10);for (int i = 0; i < 10000; i++) {//不断的新创建对象,对象大小为1Mint[] ints = new int[1024*1024];//一直往ArrayList集合添加arr.add(ints);try {TimeUnit.MILLISECONDS.sleep(100);} catch (Exception e) {e.printStackTrace();}}System.out.println("演示结束:>>>>>>>>>>>>>>>>>>>>>>>>>>>");}
}
  1. 异常信息
    在这里插入图片描述

  2. 导出堆空间快照(dump):
    先看jmap语法规则:

C:\Windows\system32>jmap -help
Usage: //语法规则,使用方式jmap [option] <pid>(to connect to running process)jmap [option] <executable <core>(to connect to a core file)jmap [option] [server_id@]<remote server IP or hostname>(to connect to remote debug server)where <option> is one of: //参数选项介绍<none>               to print same info as Solaris pmap-heap                to print java heap summary-histo[:live]        to print histogram of java object heap; if the "live" suboption is specified, only count live objects //只是当前时间节点活着的对象-clstats             to print class loader statistics-finalizerinfo       to print information on objects awaiting finalization-dump:<dump-options> to dump java heap in hprof binary formatdump-options:live         dump only live objects; if not specified,all objects in the heap are dumped.format=b     binary formatfile=<file>  dump heap to <file>Example: jmap -dump:live,format=b,file=heap.bin <pid>-F                   force. Use with -dump:<dump-options> <pid> or -histoto force a heap dump or histogram when <pid> does notrespond. The "live" suboption is not supportedin this mode.-h | -help           to print this help message-J<flag>             to pass <flag> directly to the runtime system

将堆空间信息以标准格式导出到文件:

jmap -dump:format=b,file=d:\7.hprof 14876

将堆空间存活对象的信息以标准格式导出到文件:

jmap -dump:live,format=b,file=d:\7.hprof 14876

显示当前时间节点堆内存信息:

jmap -heap 14876 >d:\a.txt  // 17924 是进程号,输出到d盘的a.txt文件

直接控制台查看堆空间信息:

C:\Windows\system32>jmap -heap 14876
Attaching to process ID 14876, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.291-b10using thread-local object allocation.
Parallel GC with 8 thread(s)Heap Configuration: //堆空间的配置信息MinHeapFreeRatio         = 0MaxHeapFreeRatio         = 100MaxHeapSize              = 8550088704 (8154.0MB)NewSize                  = 178257920 (170.0MB)MaxNewSize               = 2850029568 (2718.0MB)OldSize                  = 356515840 (340.0MB)NewRatio                 = 2SurvivorRatio            = 8MetaspaceSize            = 21807104 (20.796875MB)CompressedClassSpaceSize = 1073741824 (1024.0MB)MaxMetaspaceSize         = 17592186044415 MBG1HeapRegionSize         = 0 (0.0MB)Heap Usage: //堆空间各区使用状况
PS Young Generation
Eden Space://Eden区capacity = 134217728 (128.0MB) used     = 123984136 (118.24048614501953MB)free     = 10233592 (9.759513854980469MB)92.37537980079651% used
From Space: //Survivor from区,或者:S0capacity = 22020096 (21.0MB)used     = 0 (0.0MB)free     = 22020096 (21.0MB)0.0% used
To Space: //Survivor to区,或者:S1capacity = 22020096 (21.0MB)used     = 0 (0.0MB)free     = 22020096 (21.0MB)0.0% used
PS Old Generation //old区,或者:老年代capacity = 356515840 (340.0MB)used     = 0 (0.0MB)free     = 356515840 (340.0MB)0.0% used3196 interned Strings occupying 261920 bytes.使用的:ParallelGC垃圾收集器

直接查看进程堆空间历史对象信息

jmap -histo 15440

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/169024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

github国内访问小解(windows)

git 下载安装 使用 github 前必须确保电脑上已经安装了 Git&#xff0c;可以从 Git 官方网站去下载。 官方的网站在国内访问会比较慢&#xff0c;这里可以选择国内镜像&#xff1a;https://registry.npmmirror.com/binary.html?pathgit-for-windows/ github 之旅 确认电脑已…

【华为网络-配置-021】- MSTP 多实例配置及安全保护等

要求&#xff1a; 1、vlan 10 从红色链路转发。 2、vlan 20 从黄色链路转发。 一、基础配置 [SW1]vlan batch 10 20 [SW1]interface GigabitEthernet 0/0/1 [SW1-GigabitEthernet0/0/1]port link-type trunk [SW1-GigabitEthernet0/0/1]port trunk allow-pass vlan all [SW…

Python基础入门例程63-NP63 修改报名名单(元组)

最近的博文: Python基础入门例程62-NP62 运动会双人项目(元组)-CSDN博客 Python基础入门例程61-NP61 牛牛的矩阵相加(循环语句)-CSDN博客 Python基础入门例程60-NP60 跳过列表的某个元素(循环语句)-CSDN博客 目录 最近的博文: 描述

小程序姓名:ssm+vue基本微信小程序的个人健康管理系统

项目介绍 首先,论文一开始便是清楚的论述了小程序的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了小程序的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数…

LeetCode OJ循环队列(C语言)

1.题目的初步分析 我们分析上述题目的时候会发现题目非常的长&#xff0c;不好整理思路&#xff0c;我这里可以大致的将本题的几个核心点说出来&#xff1a; 1.队列的思路 循环队列说来说去不还是队列嘛&#xff0c;那么队列的基本操作增删查改、以及队列的基本结构肯定都是不能…

十大排序之堆排序(详解)

文章目录 &#x1f412;个人主页&#x1f3c5;算法思维框架&#x1f4d6;前言&#xff1a; &#x1f380;堆排序 时间复杂度O(n*logn)&#x1f387;1. 算法步骤思想&#x1f387;2、动画演示&#x1f387;3.代码实现 &#x1f412;个人主页 &#x1f3c5;算法思维框架 &#x1…

[黑马程序员SpringBoot2]——开发实用篇3

目录&#xff1a; jetcache远程缓存方案jetcache本地缓存方案jetcache方法缓存j2cache基本操作springboot整合quartz​​​​​​​springboot整合task发送简单邮件发送多部件邮件消息简介购物订单案例-发送短信ActiveMQ安装springboot整合ActiveMQRabbitMQ安装springboot整合…

【HarmonyOS】ArkTS开发中自定义组件的完全指南:从基础用法到生命周期管理

文章目录 HarmonyOS详解ArkTS详解在ArkUI中创建自定义组件的详细指南自定义组件的基本用法自定义组件的基本结构自定义组件的参数规定自定义组件的生命周期页面生命周期组件生命周期自定义组件的最小化应用页面切换与组件销毁注意事项结语HarmonyOS详解 HarmonyOS(鸿蒙OS)是…

【鬼鬼鬼iiARPG开发记录】

鬼鬼鬼ARPG开发记录 一、创建项目1、创建3D(URP)项目2、导入新的输入系统&#xff08;input system&#xff09;3、勾选Enter Play Mode Options 二、导入资源1、创建若干文件夹 一、创建项目 1、创建3D(URP)项目 2、导入新的输入系统&#xff08;input system&#xff09; …

分布式数据恢复-hbase+hive分布式存储误删除如何恢复数据?

hbasehive分布式存储数据恢复环境&#xff1a; 16台某品牌R730XD服务器节点&#xff0c;每台物理服务器节点上有数台虚拟机&#xff0c;虚拟机上配置的分布式&#xff0c;上层部署hbase数据库hive数据仓库。 hbasehive分布式存储故障&初检&#xff1a; 数据库文件被误删除…

mac测试远程端口是否可连接

打开命令行工具&#xff0c;使用命令nc -z ip port即可 &#xff0c;如果成功&#xff0c;则会返回如下信息&#xff1a; 。

LeetCode算法题解(动态规划)|LeetCode139. 单词拆分

LeetCode139. 单词拆分 题目链接&#xff1a;139. 单词拆分 题目描述&#xff1a; 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单…

从零开始学习管道:进程通信的概念,特点和示例

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容通过进程通信的概念&#xff0c;引入管道&#xff0c;实…

[PHP]ShopXO企业级B2C免费开源商城系统 v2.3.1

ShopXO 企业级B2C免费开源电商系统&#xff01; 求实进取、创新专注、自主研发、国内领先企业级B2C电商系统解决方案。 遵循Apache2开源协议发布&#xff0c;无需授权、可商用、可二次开发、满足99%的电商运营需求。 PCH5、支付宝小程序、微信小程序、百度小程序、头条&抖音…

【LeetCode】283. 移动零

283. 移动零 难度&#xff1a;简单 题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1…

【小技巧】复制一个模块到你的工程(学习阶段很实用)

问题描述&#xff1a; 当我们学习Springboot时&#xff0c;需要创建大量的模块&#xff0c;而这些模块的许多代码都是重复的&#xff0c;只有模块名等相关的信息不一样&#xff0c;现在就教你如何快速创建一个模块。 应用场景&#xff1a; ①进入项目文件夹&#xff1a; ②复…

如何利用4G路由器构建茶饮连锁店物联网

随着年轻消费群体的增长&#xff0c;加上移动互联网营销的助推&#xff0c;各类新式奶茶消费风靡大街小巷&#xff0c;也促进了品牌奶茶连锁店的快速扩张。 在店铺快速扩张的局势下&#xff0c;品牌总部对于各间连锁店的零售统计、营销规划、物流调配、卫生监测、安全管理等事务…

多功能PHP图床源码:Lsky Pro开源版v2.1 – 最新兰空图床

Lsky Pro是一款功能丰富的在线图片上传和管理工具&#xff0c;即兰空图床。它不仅可以作为个人云相册&#xff0c;还可以用作写作贴图库。 该程序的初始版本于2017年10月由ThinkPHP 5开发&#xff0c;经过多个版本的迭代&#xff0c;于2022年3月发布了全新的2.0版本。 Lsky Pro…

Spring Boot整合RabbitMQ

一、简介 在Spring项目中&#xff0c;可以使用Spring-Rabbit去操作RabbitMQ 尤其是在spring boot项目中只需要引入对应的amqp启动器依赖即可&#xff0c;方便的使用RabbitTemplate发送消息&#xff0c;使用注解接收消息。 一般在开发过程中&#xff1a; 生产者工程&#xf…

CSS新手入门笔记整理:CSS基本介绍

CSS&#xff0c;指的是“Cascading Style Sheet&#xff08;层叠样式表&#xff09;”&#xff0c;用于控制网页外观。 CSS引入方式 外部样式表 独立建立一个.CSS文件&#xff0c;在HTML中使用 link标签 来引用CSS文件。link标签放置在head标签内部。 语法 <link rel&qu…