当前位置: 首页 > 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.lryc.cn/news/592273.html

相关文章:

  • Kubernetes Pod 深度理解
  • 【C语言进阶】题目练习(2)
  • Composer 可以通过指定 PHP 版本运行
  • uni-app 跳转外部连接
  • 网络原理——UDP
  • 如何 ASP.NET Core 中使用 WebSocket
  • html复习
  • 【收集电脑信息】collect_info.sh
  • 电脑插上u盘不显示怎么回事
  • 分表聚合助手类
  • 分布式面试点
  • RecyclerView与ListView深度对比分析
  • 从复合变量到分组分析:piecewiseSEM 解析生态系统多因子交互作用
  • UDP 协议下一发一收通信程序的实现与解析
  • Linux 定时任务全解析:atd 与 crond 的区别及实战案例(含日志备份 + 时间写入)
  • AugmentCode还没对个人开放?
  • 双通达信多板块同步
  • 如何抉择HTTPSProxy?
  • AR技术重塑电力巡检:效率提升与智能升级
  • 三维重建一: 相机几何
  • 基于ROS2进行相机标定,并通过测试相机到棋盘格之间的距离进行验证
  • Go语言实战案例-斐波那契数列生成器
  • 9. isaacsim4.2教程-ROS加相机/CLOCK
  • pgsql导出导入超过50G数据、解决方法
  • hive分区表临时加载日批数据文件
  • MyBatis 动态 SQL:让 SQL 语句随条件灵活变化
  • [源力觉醒 创作者计划]_文心一言 4.5开源深度解析:性能狂飙 + 中文专精
  • 美创科技建设项目被评为中国信通院医疗领域“磐安”优秀案例
  • 禁止拖动视频进度条来保障视频安全?
  • 西门子工业软件全球高级副总裁兼大中华区董事总经理梁乃明先生一行到访庭田科技