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

Java内存泄漏排查

内存泄漏排查

  • 1. 堆内存快照导出
  • 2. 导入内存分析工具

1. 堆内存快照导出


  1. 获取 Java 进程 ID

    • Windows:执行 jps 命令,或任务管理器查看,又或者执行 tasklist 命令。

      注意:当有多个 Java 进程时,任务管理器或 tasklist | findstr "java"无法区分特定进程,推荐使用 jps 命令

      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    • Linux

      docker exec -it <容器ID或容器名> bash		#容器启动需要先进入容器,非容器启动直接执行下一条命令
      ps -ef | grep java	#查找java进程的进程ID,或直接执行pgrep java查找,又或者直接执行JDK提供的jsp命令
      
  2. 使用 jmap 生成 Heap Dump 文件

    JDK 自带的一个命令行工具,可以用来生成 Java 进程的堆转储文件(heap dump),这个文件包含了 JVM 堆中所有对象的信息

    # 其中format=b表示输出为二进制格式,file=<output_file_path>指定输出文件的路径及名称,<pid>则是上一步找到的进程ID。
    jmap -dump:format=b,file="D:\Download\heap.prof" <pid>
    

2. 导入内存分析工具


常用的内存分析工具

  • VisualVM:VisualVM 是一个集成的工具,它允许开发者监控和分析Java应用程序的性能,包括内存使用情况、线程活动、编译器统计、垃圾收集行为等。VisualVM 随 JDK 发布一起提供,是一个非常强大的工具,适用于开发环境和生产环境的故障排查。

  • Eclipse Memory Analyzer (MAT):MAT 是一个专门用于分析 Java 应用程序内存消耗的工具。它可以从 JVM 中获取堆转储文件,并提供详细的内存分析报告,包括泄露检测、对象统计等。MAT 是一个独立的工具,可以离线分析堆转储文件。

  • IDEA Profiler:和 VisualVM 工具功能一致,但加载速度相当快,而且不占太多内存

推荐

当内存溢出时,如果-Xmx(最大堆内存大小)之前设置的很大,那么导出的 heap 文件也很大,因此堆内存分析时也会占用很大的内存

  • 如果自己能分析堆内存占用情况,推荐使用 IDEA Profiler(加载快,占用内存小)。
  • 如果需要工具自动分析,并提供泄露检测报告,推荐使用 MAT(加载慢,占用内存特别大,而且卡死过几次)。

JPS命令:https://blog.csdn.net/heihaozi/article/details/123441649



http://www.kler.cn/news/315789.html

相关文章:

  • uniapp小程序持续获取用户位置信息,后台位置获取
  • 9.22学习记录
  • 如何在 UniApp 中实现地图的视野自适应?
  • STM32系统时钟
  • 如何创建标准操作规程(SOP)[+模板]
  • 移动技术开发:简单计算器界面
  • en造数据结构与算法C# 用Unity实现简单的群组行为算法 之 聚集
  • 数据库 | 索引
  • 记K8s组件harbor和kuboard故障恢复
  • 桶排序和计数排序(非比较排序算法)
  • QT实现升级进度条页面
  • 计算机毕业设计之:基于深度学习的路面检测系统(源码+部署文档+讲解)
  • frpc内网穿透
  • Card View 卡片视图
  • 软媒市场新探索:软文媒体自助发布,开启自助发稿新篇章
  • 算法练习题24——leetcode3296移山所需的最小秒数(二分模拟)
  • Mysql删库跑路,如何恢复数据?
  • HDFS性能优化高频面试题及答案
  • AWS 将 OpenSearch 纳入 Linux 基金会旗下
  • 四十一、完成内容添加功能(使用go测试方法)
  • 全栈项目小组【算法赛】题目及解题
  • How do you send files to the OpenAI API?
  • 1.量化第一步,搭建属于自己的金融数据库!
  • 鸿蒙设置,修改APP图标和名称
  • Android Choreographer 监控应用 FPS
  • 如何在Chrome最新浏览器中调用ActiveX控件?
  • 什么时候用synchronized,什么时候用Reentrantlock
  • 高等数学——微分学
  • 5.《DevOps》系列K8S部署CICD流水线之K8S通过Yaml部署GitLab
  • C++从入门到起飞之——多态 全方位剖析!