当前位置: 首页 > news >正文

jvm分析篇---1、先认识下dump文件

目录

一、简介

二、生成方式

三、Java Web项目配置参数

四、最佳实践


一、简介

Dump文件是JVM在运行过程中生成的内存快照文件,主要用于诊断Java应用的内存问题(如内存泄漏、OOM错误)和线程状态分析。在Java Web项目中,常见的dump文件类型包括:

  1. 堆Dump(Heap Dump)
    记录JVM堆内存中所有对象的详细信息,包括对象类型、引用关系和内存占用。 $$ \text{文件大小} \approx \text{堆内存使用量} $$
  2. 线程Dump(Thread Dump)
    捕获所有线程的瞬时状态(如调用栈、锁状态),用于分析死锁或线程阻塞问题。
二、生成方式
  1. 自动触发

    • OOM错误时生成:通过JVM参数配置(见第三节)
    • JVM崩溃时生成:如Native代码导致的崩溃(hs_err_pid.log
  2. 手动触发

    # 生成堆Dump
    jmap -dump:format=b,file=heapdump.hprof <pid># 生成线程Dump
    jstack -l <pid> > threaddump.txt
    

    <pid> 通过 jpsps -ef | grep java 获取

  3. 通过工具触发

    • JVisualVM / JConsole 的"Heap Dump"按钮
    • Arthas的 heapdump / thread 命令
    • Linux信号:kill -3 <pid> 生成线程Dump到标准输出
三、Java Web项目配置参数

在应用服务器启动脚本中(如Tomcat的catalina.shcatalina.bat)添加JVM参数:

# 基础配置示例(Tomcat)
JAVA_OPTS="$JAVA_OPTS 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=/opt/dumps/webapp_heapdump.hprof 
-XX:ErrorFile=/opt/dumps/hs_err_pid%p.log 
-XX:+PrintGCDetails 
-Xloggc:/opt/dumps/gc.log"

参数作用推荐值
-XX:+HeapDumpOnOutOfMemoryErrorOOM时自动生成堆Dump必开启
-XX:HeapDumpPath指定堆Dump保存路径绝对路径(确保写权限)
-XX:ErrorFileJVM崩溃日志路径%p 表示进程ID
-XX:+CrashOnOutOfMemoryErrorOOM时强制崩溃生成完整Dump可选
-XX:OnOutOfMemoryError触发自定义脚本kill -3 %p
四、最佳实践
  1. 路径配置

    -XX:HeapDumpPath=/var/dumps/${webapp_name}_%t.hprof
    

    %t 自动添加时间戳,避免覆盖

  2. 监控集成

    • 使用APM工具(如SkyWalking、Pinpoint)自动捕获Dump
    • 日志系统监控 java.lang.OutOfMemoryError 关键字
  3. 分析工具

    • Eclipse MAT:分析堆Dump内存泄漏
    • FastThread:在线分析线程Dump
    java -jar mat.app/Contents/MacOS/MemoryAnalyzer heapdump.hprof
    

  4. 安全策略

    • 限制Dump文件访问权限(避免敏感数据泄露)
    • 定期清理旧文件(通过cron任务)

:生产环境建议配置-XX:+ExitOnOutOfMemoryError防止故障扩散,同时确保Dump路径磁盘空间充足(通常预留2倍堆内存空间)。

http://www.xdnf.cn/news/1146439.html

相关文章:

  • b-up:Enzo_Mi:深度学习基础知识
  • 【C语言进阶】题目练习(2)
  • 【51】MFC入门到精通——MFC串口助手(一)---初级版(初始化、串口设置、修改参数、打开/关闭、状态显示),附源码
  • 机器学习基础:线性回归算法详解(原理+代码+实战)
  • Proto文件从入门到精通——现代分布式系统通信的基石(含实战案例)
  • 数据库模型异常问题深度解析:冗余与操作异常
  • 柴油机活塞cad【4张】三维图+设计说明书
  • 小架构step系列18:工具
  • 《每日AI-人工智能-编程日报》--2025年7月18日
  • 【洛谷P1417】烹调方案 题解
  • SQL注入基础尝试
  • 71 模块编程之新增一个字符设备
  • ArcGIS Pro+PS 实现地形渲染效果图
  • 上网行为管理-web认证服务
  • 【C++基础】--多态
  • ThreadLocal 在 Spring 与数据库交互中的应用笔记
  • 北京-4年功能测试2年空窗-报培训班学测开-第五十四天
  • Kubernetes Pod深度理解
  • 大模型格式
  • 外部DLL创建及使用
  • UVC for USBCamera in Android - 篇二
  • 腾讯 ChatBI 调研
  • 如何为“地方升学导向型”语校建模?Prompt 框架下的宇都宫日建工科专门学校解析(7 / 500)
  • Java HashMap高频面试题深度解析
  • 对于编码电机-520直流减速电机
  • 【AI News | 20250717】每日AI进展
  • 3.3 参数传递方式
  • 应用集成体系深度解析:从数据互通到流程协同
  • 20250718【顺着234回文链表做两题反转】Leetcodehot100之20692【直接过12明天吧】今天计划
  • Machine Learning HW2 report:语音辨识(Hongyi Lee)