在处理压力测试问题的时候,经常遇到OOM的情况,这时候我们需要去记录内存实时的情况,一般会打出一个dump文件,而后再使用MAT等内存分析工具去查看哪些对象一直占用了大量内存,最终分析出代码需要优化的地方。

那么java如何打出dump文件呢?

java提供了jmap命令,如下:

jmap -dump:format=b,file=/path/heap.bin 进程ID

jmap -dump:live,format=b,file=/path/heap.bin 进程ID

live参数:

表示我们需要抓取目前在生命周期内的内存对象,也就是说GC收不走的对象,然后我们绝大部分情况下,需要的看的就是这些内存。而且会减小dump文件的大小。

在命令行下可以直接运行,当然使用java也可以按指定方式执行,示例如下:

package com.szh;

import java.io.BufferedReader;

import java.io.File;

import java.io.IOException;

import java.io.InputStreamReader;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Scanner;

import java.util.concurrent.TimeUnit;

public class TestDump {

public static void main(String[] args) throws InterruptedException, IOException {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");

Runtime runtime = Runtime.getRuntime();

Scanner scanner = new Scanner(System.in);

System.out.println("请输入java进程PID:");

int pID = scanner.nextInt();

System.out.println("请输入dump文件输出路径:");

String dumpPath = scanner.next();

scanner.close();

if (!dumpPath.endsWith(File.separator)) {

dumpPath = dumpPath + File.separator;

}

String cmd = "jmap -dump,format=b,file=" + dumpPath + "_" + sdf.format(new Date()) + ".bin " + pID;

runtime.exec(cmd);

TimeUnit.SECONDS.sleep(5L);

while (true) {

cmd = "jmap -dump:live,format=b,file=" + dumpPath + "_" + sdf.format(new Date()) + ".bin " + pID;

Process process = runtime.exec(cmd);

/*InputStreamReader isr = new InputStreamReader(process.getInputStream(), "GBK");

BufferedReader br = new BufferedReader(isr);

while (true) {

String str = br.readLine();

if (str == null) {

break;

}

System.out.println(str);

}*/

TimeUnit.HOURS.sleep(1L);

}

}

}

————————————————

原文链接:https://blog.csdn.net/songzehao/article/details/84575834

java 生成dump_Java生成堆内存dump相关推荐

  1. java 生成dump_java dump文件怎么生成和分析-JMAP用法详解

    jmap是java自带的工具 1. 查看整个JVM内存状态 jmap -heap [pid] 2. 查看JVM堆中对象详细占用情况 jmap -histo [pid] 3. 导出整个JVM 中内存信息 ...

  2. jstat 内存泄漏_基于Java内存dump文件分析解决内存泄漏问题

    概述 本文介绍一次解决现场java内存泄漏问题的经过,希望能提供后续遇到类似情况的读者一点思路. 生产环境发现的问题问题 生产环境运维人员反馈,服务器(windows系统)卡死,相关的服务都运行异常, ...

  3. java heap分析工具_Java Heap dump文件分析工具jhat简介

    [开发.应用中老是会遇到OutOfMemory异常,而且常常是过一段时间内存才被吃光,这里可以利用java heap dump出jvm内存镜像,然后再对其进行分析来查找问题.<java heap ...

  4. modeler java堆空间,JVM|02内存模型

    JVM内存模型 概述 Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保 ...

  5. POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解...

    http://blog.csdn.net/l081307114/article/details/46009015 http://www.cnblogs.com/dreammyle/p/5458280. ...

  6. Java占Linux超过xms,linux下分析java程序占用CPU、内存过高

    一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ...

  7. JVM内存Dump原理与在线分析实战 | 得物技术

    1.前言 当前我们微服务容器化部署JVM 实例很多,常常需要进行JVM heap dump analysis,为了提升JVM 问题排查效率,得物技术保障团队研究了JVM内存Dump 原理与设计开发了J ...

  8. 读书笔记——Java虚拟机垃圾收集器与内存分配策略

    本文章已授权微信公众号郭霖(guolin_blog)转载. 本文章讲解的内容是Java虚拟机垃圾收集器与内存分配策略. 概述 说起垃圾收集(Garbage Collection),也就是GC,大部分人 ...

  9. java应用程序占用高内存_对Java应用程序中的内存问题进行故障排除

    java应用程序占用高内存 重要要点 解决内存问题可能很棘手,但是正确的方法和正确的工具集可以大大简化此过程. Java HotSpot JVM可以报告几种OutOfMemoryError消息,因此务 ...

最新文章

  1. 软件测试安全测试高峰论坛
  2. 绘画 某种字体 以某种折行规则 最后画出的text有多大
  3. vsftp匿名访问目录_VSFTP本地用户目录跟匿名用户目录肿么修改?
  4. WTL学习笔记——初章
  5. 腾讯会议开放API接口,为企业打造专属的“腾讯会议”
  6. 数字化方法基础_常用函数
  7. 安装Git SCM for Windows
  8. maven配置tomcat版本
  9. MySQL查询所有叶子节点
  10. 聚类分析 matlab
  11. 渥太华大学OU-iti1120 Assignment 1课业解析
  12. 业务流程再造和IT服务能力
  13. java 中Protect 关键字
  14. 计算机管理 服务无响应,电脑任务栏假死点击没反应的解决方法(win7与xp)
  15. xcode写在_迷失在Xcode领域
  16. 湖南“聚才兴湘”2014年春季特大型综合人才招聘会4月12日举行
  17. unity www 加载url 读微信头像
  18. 判断一个链表是否有环
  19. R语言数据清洗与规整-回归模型为例
  20. python人工智能入门书籍推荐-人工智能极简编程入门(基于PYTHON)

热门文章

  1. python爬取笔趣阁小说的代码微小调整修改
  2. 浅谈色彩心理 颜色表情
  3. stm32之中断模式
  4. 【C语】例如2+22+222+2222+22222此式的和
  5. 连接器选型,一不留神就容易踩到的坑
  6. 当一个测试工程师准备找工作,需要准备什么?
  7. IE和Firefox兼容性
  8. Unity预制体和预设
  9. 绩效管理能力:沟通技巧
  10. 网站架构设计发展路径学习