java 生成dump_Java生成堆内存dump
在处理压力测试问题的时候,经常遇到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相关推荐
- java 生成dump_java dump文件怎么生成和分析-JMAP用法详解
jmap是java自带的工具 1. 查看整个JVM内存状态 jmap -heap [pid] 2. 查看JVM堆中对象详细占用情况 jmap -histo [pid] 3. 导出整个JVM 中内存信息 ...
- jstat 内存泄漏_基于Java内存dump文件分析解决内存泄漏问题
概述 本文介绍一次解决现场java内存泄漏问题的经过,希望能提供后续遇到类似情况的读者一点思路. 生产环境发现的问题问题 生产环境运维人员反馈,服务器(windows系统)卡死,相关的服务都运行异常, ...
- java heap分析工具_Java Heap dump文件分析工具jhat简介
[开发.应用中老是会遇到OutOfMemory异常,而且常常是过一段时间内存才被吃光,这里可以利用java heap dump出jvm内存镜像,然后再对其进行分析来查找问题.<java heap ...
- modeler java堆空间,JVM|02内存模型
JVM内存模型 概述 Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保 ...
- POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解...
http://blog.csdn.net/l081307114/article/details/46009015 http://www.cnblogs.com/dreammyle/p/5458280. ...
- Java占Linux超过xms,linux下分析java程序占用CPU、内存过高
一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ...
- JVM内存Dump原理与在线分析实战 | 得物技术
1.前言 当前我们微服务容器化部署JVM 实例很多,常常需要进行JVM heap dump analysis,为了提升JVM 问题排查效率,得物技术保障团队研究了JVM内存Dump 原理与设计开发了J ...
- 读书笔记——Java虚拟机垃圾收集器与内存分配策略
本文章已授权微信公众号郭霖(guolin_blog)转载. 本文章讲解的内容是Java虚拟机垃圾收集器与内存分配策略. 概述 说起垃圾收集(Garbage Collection),也就是GC,大部分人 ...
- java应用程序占用高内存_对Java应用程序中的内存问题进行故障排除
java应用程序占用高内存 重要要点 解决内存问题可能很棘手,但是正确的方法和正确的工具集可以大大简化此过程. Java HotSpot JVM可以报告几种OutOfMemoryError消息,因此务 ...
最新文章
- 软件测试安全测试高峰论坛
- 绘画 某种字体 以某种折行规则 最后画出的text有多大
- vsftp匿名访问目录_VSFTP本地用户目录跟匿名用户目录肿么修改?
- WTL学习笔记——初章
- 腾讯会议开放API接口,为企业打造专属的“腾讯会议”
- 数字化方法基础_常用函数
- 安装Git SCM for Windows
- maven配置tomcat版本
- MySQL查询所有叶子节点
- 聚类分析 matlab
- 渥太华大学OU-iti1120 Assignment 1课业解析
- 业务流程再造和IT服务能力
- java 中Protect 关键字
- 计算机管理 服务无响应,电脑任务栏假死点击没反应的解决方法(win7与xp)
- xcode写在_迷失在Xcode领域
- 湖南“聚才兴湘”2014年春季特大型综合人才招聘会4月12日举行
- unity www 加载url 读微信头像
- 判断一个链表是否有环
- R语言数据清洗与规整-回归模型为例
- python人工智能入门书籍推荐-人工智能极简编程入门(基于PYTHON)