堆内存溢出时自动导出 heapdump 文件

Memory Analyzer分析内存溢出 下载适用于你操作系统的最新版本的MAT,并进行安装。 阅读详情

一、 在本地服务器的测试

为了方便测试堆内存溢出,设置了堆内存空间,以及容器可使用的内存大小。

注意:堆内存空间不能大于等于容器可使用的内存,因为如果容器的内存满了会被系统kill掉,heapdump 文件来不及导出。

1. 配置dockerfile 文件

FROM openjdk:17-jdk

# 设置工作目录
WORKDIR /usr/app

# 复制应用Jar包
COPY ./app.jar /usr/app/

# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN mkdir -p /usr/app/logs && chmod 755 /usr/app/logs

EXPOSE 8090

ENTRYPOINT ["java"]
CMD [
"-Xms256m",
"-Xmx256m",
"-XX:+UseG1GC",
"-XX:+HeapDumpOnOutOfMemoryError",
"-XX:HeapDumpPath=/usr/app/logs/heapdump.hprof",
"-Xlog:gc*:file=/usr/app/logs/gc.log:time,uptime,level,tags:filecount=5,filesize=10m",
"-jar","/usr/app/app.jar"]

2. 配置 docker-compose 文件

services:    
    app-service:
        container_name: "app_service"
        restart: unless-stopped
        image: "image-name"
        deploy:
          resources:
            limits:
              cpus: '1'
              memory: 2G
        ports:
          - 8090:8090
        volumes:
          - /opt/data/logs:/usr/app/logs

二、 在 aws ecs云服务器测试

因为服务是运行在 AWS 的 ECS Fargate 上的。如果发生堆内存溢出(堆内存不足导致)会导致健康检查失败,系统会关闭容器,这样就拿不到 heapdump 文件了。所以需要把 heapdump 文件导出到 EFS 文件系统上。

1. 创建一个安全组,放行 2049 端口,用于可以访问 EFS 文件系统

2. 创建 EFS 文件系统

在选择网络时,选择和 ECS 服务同一个VPC。

挂载目标选择多个可用区,这样不同可用区的 ECS 容器都可以访问这个 EFS。

安全组选择第一步创建的。其他的可以选择默认

3. 创建一个 EC2

创建EC2时,网络设置中,选择和 EFS 同一个VPC,子网选择 EFS 挂载目标时可用区里的子网

在配置存储/存储(卷)模块选择文件系统,添加共享的文件系统,挂载刚才创建的 EFS 文件系统,这样就可以通过挂载点访问 EFS 的根目录了。

登录 EC2,目录切换到 /mnt/efs/fs1,这样就可以在 EFS 文件系统上上传或下载文件了。

4. 配置 dockerfile 文件

FROM arm64v8/gradle:7.4.2-jdk17
COPY ./build/libs/app.jar /usr/app/
WORKDIR /usr/app
EXPOSE 8090

ENTRYPOINT ["sh","-c",
    "mkdir -p /var/heapdump/logs &&
     chmod -R 775 /var/heapdump/logs &&
     exec java -Xms256m -Xmx256m 
      -XX:+UseG1GC 
      -XX:+HeapDumpOnOutOfMemoryError 
      -XX:HeapDumpPath=/var/heapdump/logs/heapdump.hprof 
      -Xlog:gc*:file=/var/heapdump/logs/gc.log:time,
      uptime,level,tags:filecount=5,filesize=10m 
      -jar /usr/app/app.jar"]

"sh","-c","mkdir -p /var/heapdump/logs && chmod -R 775 /var/heapdump/logs 的作用是镜像在容器里启动时再创建目录。

如果是 RUN mkdir -p /var/heapdump/logs && chmod -R 775 /var/heapdump/logs 这样在创建镜像时文件夹就已经创建好了,当 ECS 系统启动时,挂载的路径会覆盖掉这个路径。因为系统启动时会挂载 EFS,/var/heapdump 路径会映射 EFS 文件系统的路径,所以在挂载 EFS 后再创建文件夹,才会在 EFS 文件系统上创建,而不是在 ECS 容器上创建。

5. 修改 ECS 服务的任务定义

在存储模块选择 添加卷

定义一个卷名称,等会挂载卷时使用。

选择卷类型 EFS。

根目录是 EFS 文件系统上的目录,这个目录需要提前创建,也可以直接写 / 表示挂载 EFS 的根目录。

源卷就是上一步添加的卷

容器路径是 ECS 容器里的路径。

这样容器里的服务就可以通过 /var/heapdump 访问 EFS /heapdump 文件夹。

然后就可以了。启动服务后,当发生堆内存溢出时,JVM会自动导出 heapdump 文件到EFS文件系统,到时候就可以通过 EC2 下载该文件。

Linux V4L2驱动开发实战:手把手教你用I2C摄像头Sensor注册一个v4l2_subdev 本文详细解析了Linux V4L2驱动开发中I2C摄像头Sensor注册v4l2_subdev的全流程,包括初始化、操作集填充、异步匹配等关键环节。通过实战案例和代码示例,帮助开发者掌握V4L2子系统下的摄像头驱动开发技巧,提升嵌入式Linux系统开发能力。 阅读详情

相关推荐

CocosCreator视频播放黑屏?手把手教你封装VideoPlayer组件解决Web环境问题

本文针对Cocos Creator在Web环境下视频播放黑屏等常见问题,提供了一套工程化的VideoPlayer组件封装解决方案。文章深入剖析了浏览器自动播放策略、DOM样式隔离等核心挑战,并手把手教你实现一个健壮的管理器,涵盖兼容性处理、性能优化与内存管理,确保视频播放稳定流畅。

plum99的博客 598

heapdump 使用简述

heapdump 分析

djp304的博客 1万+

保姆级教程:用CellOracle 0.10.13从单细胞数据构建基因调控网络(附完整代码)

本文提供了一份详细的CellOracle 0.10.13使用指南,帮助用户从单细胞数据构建基因调控网络。通过Python接口,即使是生物信息学新手也能快速掌握数据准备、KNN插补、GRN计算及可视化等关键步骤。文章包含完整代码和实用技巧,助力单细胞转录组数据分析。

weixin_42563415的博客 721

JVM---常规堆内存溢出场景排查方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、堆内存溢出二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、堆内存溢出 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): im

池海 2447

逆向攻防世界CTF系列40-ReverseMe-120

注意sub_401000main中只传了两个参数,但是跟进后发现四个(可能是隐式传递,放在寄存器里传递了),调试发现a4是输入长度,与最终的you_know_how_to_remove_junk_code比较的是v12(但是并没有被传入),开始怀疑是不是隐式传递了。_mm_xor_si128用于计算128位(16字节)的按位异或,然后通过v14控制循环结束的条件,可以看到v14增长的步长为16,而且通过上面得到的flag值解码得到的字符串为32个字节大小,正好是16的整数倍。

LH1013886337的博客 1408

STM32 SAI接口实战:用CubeMX快速配置多通道音频采集(附DMA优化技巧)

本文详细介绍了如何使用STM32的SAI接口通过CubeMX快速配置多通道音频采集系统,并提供了DMA双缓冲优化技巧。内容涵盖TDM模式配置、时钟同步、DMA优化及常见问题排查,帮助开发者高效实现高速数据采集应用。

weixin_42549037的博客 225

Arthas排查Java堆内存溢出

tt -i 1000 -w '{target,params[0]}' # 查看第1000次调用的参数。:查找内存泄漏(Dominator Tree、Leak Suspects)。通过以上步骤,可以快速定位是配置问题、代码缺陷还是资源管理不当导致的OOM。频率是否异常(频繁Full GC可能表明内存不足)。检查是否有线程在大量分配对象(如循环中创建大集合)。:对象因代码逻辑(如静态集合、未关闭资源)无法回收。:仅导出存活对象(减少文件大小)。# 查看方法参数/返回值中的大对象。

qq_45226339的博客 2413

【DMA】认识 DMA 及其工作流程(与传统CPU存取方式的区别)

【DMA】认识 DMA 及其工作流程(与传统CPU存取方式的区别)

challenglistic的博客 5万+

使用jmap和MAT进行堆内存溢出分析

jmap:Java内存映像工具 jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。另外,还有几种方式获取dump文件:使用JVM参数选项-XX:+HeapDumpOnOutOfMemoryError参数,可以让虚拟机在OOM异常出现之后自动生成dump文件,通过-XX:HeapDumpPath=path 设置dump文件路径(有时...

没头脑遇到不高兴 4327

SAP_SD模块 物料科目分配/成本简介

路径:SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—收入科目确定相关性—定义并分配科目代码—定义科目代码。路径:SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—收入科目确定相关性—定义访问顺序和科目确定类型。路径:SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—收入科目确定相关性—定义并分配科目确定过程。文本主要说明销售模块中的科目分配和成本的一个对应关系。SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—检查科目分配的相关主数据。

我小时候很黑的博客 2617

撸毛笔记-朴朴超市 v1.01

朴朴超市 v1.01脚本地址:自动签到和组队赚朴分, 朴分可以抵扣50%的金额组队瓜分需要4人成团, 每个号每天只能开团和入队各一次每天跑一两次即可使用扫码或自己想办法捉refreshToken扫码获取token: (先微信进入朴朴超市小程序并登录注册过账号再扫码)把获取的refreshToken和备注(非必须)填到文件pupuCookie.txt里(第一次运行会自动创建), 多账号换行或&或@隔开。

xiaoshun007的专栏 1805

JAVA系列:堆内存溢出时,自动保存内存快照dump方法

手动导出dump jmap -dump:format=b,file=heap.hprof pid 自动导出dump -XX:+HeapDumpOnOutOfMemoryError 可以通过 -XX:HeapDumpPath=/tmp/heapdump.hprof 来显示指定路径 此外,OnOutOfMemoryError参数允许用户指定当出现oom时,指定某个脚本来完成一些动作。 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/...

NIO4444 5350

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

怎样分析服务器的内存溢出文件,线上系统内存溢出分析方法

点击上方蓝字关注我们一、生产环境操作系统:CentOS6.7JDK版本:jdk1.6.0_45中间件版本:apache-tomcat-6.0.37JVM堆内存配置:-Xms8192m-Xmx8192m二、事件起因系统前台应用节点告警“URL连接超时”2.1 使用jstat命令—JVM统计监测工具对堆内存进行分析jstat -gcutil PID经过查看,JVM堆内存的年轻代和老年代使用率达到100...

weixin_39923945的博客 473

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【JVM调优系列】如何导出堆内存文件

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

使用jmap命令(用于输出对象,适用于解决对象内存溢出等问题)导出内存映象文件与堆内存异常分析 MAT

内存溢出自动导出参数: //发生溢出时dump出来 -XX:+HeapDumpOnOutOfMemoryError //dump的路径 ./为项目启动根路径 -XX:HeapDumpPath=./ 内存溢出手动导出参数:jmap命令使用 jdk安装后会自带一些小工具,jmap命令(Java Memory Map)是其中之一。主要用于打印指定Java进程(或核心文件、远程调试服务器)的共...

中年闰土的博客 28万+

【JVM】Java程序生成Heap dump几种方式

1、Heap Dump概述 Heap dump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况。Heap dump文件是指定时刻的Java堆栈的快照,是一种镜像文件。Heap dump一般都包含了一个堆中的Java Objects, Class等基本信息。同时,当你在执行一个转储操作时,往往会触发一次GC,所以你转储得到的文件里包含的信息通常是有效的内容(包含比较少,或没有垃圾对象了) 。我们可以这么理解:heap dump记录内存信息的,thread dump是记录CPU信息的。 Heap D

时光、疏离了记忆づ童话的博客 9416

【Java开发300个实用技巧】101.内存溢出MAT分析dump文件

CyclicBarrier是Java并发编程中的重要工具,具有重用特性,允许多个线程在达到屏障点后重新出发,与一次性同步工具如CountDownLatch不同。本文深入探讨了CyclicBarrier的重用机制,包括其底层原理、典型应用场景和常见错误用法。通过Generation对象,CyclicBarrier实现了生命周期管理,确保在多阶段任务和数据分片处理中的高效协同。文章还提供了性能优化技巧,如结合线程池和使用超时机制,并总结了最佳实践,如屏障监控和防御式编程。掌握CyclicBarrier的重用精髓

1637

用heapdump_tool定位堆内存中的数据库密码,守住敏感信息泄露防线

JVM堆内存快照是排查线上内存溢出等问题的重要手段,但也可能成为敏感信息泄露的入口。在Spring Boot应用中,配置项被加载后,数据库连接串、账号密码等明文信息往往以String对象长期残留在堆内存中,一旦生成heapdump文件,便等效于将配置全量暴露。heapdump_tool作为命令行分析工具,能够流式解析大型堆转储文件,通过关键词快速定位密码、密钥、Token等敏感字段,并输出对象引用链,帮助工程师在应急场景下分钟级确认泄露源头。结合连接池配置、外部化密钥、dump文件生命周期管理等实践,可以有

weixin_29323551的博客 251

在Linux中tomcat占用内存过高可以通过导出hprof日志来解决

在Linux中tomcat占用内存过高可以通过导出hprof日志来解决

weixin_43268590的博客 1152

websphere内存溢出,手动导出was的phd和javacore文件

网上有很多方法,ibm官方也提供了。但是,好奇怪,好像只有百度博客的一片文章提出要先设置环境条目或定制属性,否则命令不生效。 我测试了很多种方法,只有一种生效。贴出来,给需要的人看看。 1:服务器-->服务器类型-->WebSphereApplicationServer 2:点击进入server1 3:如果是was7的话     服务器基础机构--&...

weixin_30765319的博客 485

如何导出java内存快照_JVM探秘:jmap生成内存堆转储快照

本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。jmap 命令用来生成内存堆转储快照,一般称为heapdump或dump文件。除了使用 jmap 命令,还以通过一些JVM参数让虚拟机在内存溢出时自动dump出快照文件。参数说明-XX:+HeapDumpOnOutOfMemoryError内存溢出时自动导出内存快照-XX:HeapDumpPath=...

weixin_35849711的博客 3532

堆内存溢出时,保存内存快照:-XX:+HeapDumpOnOutOfMemoryError

-XX:+HeapDumpOnOutOfMemoryError该配置会把快照保存在用户目录或者tomcat目录下,也可以通过 -XX:HeapDumpPath=/tmp/heapdump.hprof 来显示指定路径此外,OnOutOfMemoryError参数允许用户指定当出现oom时,指定某个脚本来完成一些动作,比如邮件知会。。。-XX:+HeapDumpOnOutOfMemoryError -...

Akaks的博客 1万+

生产环境发生OOM时,如何生成dump文件

现网环境,难免发生内存溢出(Out Of Memory),那发生内存溢出时,我们想知道当时发生了什么,是什么原因导致了内存溢出。这时候就需要生成dump文件,dump文件是JVM的快照。那要怎么生成dump文件呢? 这时候,就需要在项目的启动命令(或者shell脚本)添加一些启动参数,如果发生OOM,即刻生成dump。接下来讲一下,如何设置的问题。 设置如下2个参数即可: -XX:+He...

shoolbean的博客 5636

【JVM】三、JVM内存溢出问题分析查看

【JVM】三、JVM内存溢出问题分析查看

weixin_43333483的博客 575

centos java jvm启动参数设置OOM异常时,自动生成dump文件

设置如下2个参数即可: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -XX:+HeapDumpOnOutOfMemoryError 设置当首次遭遇内存溢出时导出此时堆中相关信息 -XX:HeapDumpPath=/tmp/heapdump.hprof 指定导出堆信息时的路径或文件名 java -Xms750m -Xmx750m -Xmn512m -Xss1024k -XX:MaxPermSize=1.

eCaiFu800的专栏 1653

jmap的使用以及内存溢出分析

jmap的使用以及内存溢出分析 jmap(java内存映像工具) jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。还有几种方式获取dump文件:使用JVM参数选项-XX:+HeapDumpOnOutOfMemoryError参数,可以让虚拟机在OOM异常出现之后自动生成dump文件,通过-XX:HeapDumpPath=path 设置dump文件路径(有时候dump文件比较大的时候可能无法自动导出,这时候就需要使用jmap -dump手动导

很大森的博客 8483
上一篇: 【学习笔记】GitLab 16.10.1 下载安装与配置
LearnTech_123
博客等级 码龄3年 445粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值