java内存溢出分析工具

http://www.cnblogs.com/preftest/archive/2011/12/08/2281322.html
java内存溢出分析工具:jmap使用实战

在一次解决系统tomcat老是内存撑到头,然后崩溃的问题时,使用到了jmap。
 1 使用命令
 在环境是linux+jdk1.5以上,这个工具是自带的,路径在JDK_HOME/bin/下
 jmap -histo pid>a.log

2 输出结果摘要
 Size    Count   Class description
 -------------------------------------------------------
 353371288       9652324 char[]
 230711112       9612963 java.lang.String
 139347160       114865  byte[]
 76128096        3172004 java.util.Hashtable$Entry
 75782280        3157595 com.test.util.IPSeeker$IPLocation
 25724272        9115    java.util.Hashtable$Entry[]
 9319968 166428  org.apache.tomcat.util.buf.MessageBytes
 8533856 32889   int[]

发现有大量的String和自定义对象com.test.util.IPSeeker$IPLocation存在,检查程序发现此处果然存在内存溢出。修改程序上线后再次用jmap抓取内存数据:

146881712   207163  byte[]
 98976352    354285  char[]
 42595272    53558   int[]
 11515632    479818  java.util.HashMap$Entry
 9521896 59808   java.util.HashMap$Entry[]
 8887392 370308  com.test.bean.UnionIPEntry
 8704808 155443  org.apache.tomcat.util.buf.MessageBytes
 8066880 336120  java.lang.String

内存溢出问题消除。
 注意:这个jmap使用的时候jvm是处在假死状态的,只能在服务瘫痪的时候为了解决问题来使用,否则会造成服务中断。
时间: 2024-10-16 17:53:03

java内存溢出分析工具的相关文章

Java 内存溢出分析

相关内存知识描述 方法区 保存装载的类信息 类的常量池 字段.方法信息 方法字节码 通常和永久(Perm)关联在一起 Java堆 和程序开发密切相关 应用系统对象都保存在Java堆中 所有线程共享Java堆 对分代GC来说,堆也是分代的 GC的主要工作区间 Java栈 线程私有 栈由一系列帧组成(因此Java栈也叫做帧栈) 帧保存一个方法的局部变量.操作数栈.常量池指针 每一次方法调用创建一个帧,并压栈 用代码描述下,虚拟机执行过程中内存分配 public class App //运行时, jv

[转]Java内存溢出详解及解决方案

原文地址:http://blog.csdn.net/xianmiao2009/article/details/49254391 内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是可以知道在什么时候或是在什么操作步骤上出现了异常,而且根据堆栈信息也很容易定位到程序中是某处出现了问题.内存溢出与锁表则不然,一般现象是操作一般时间后系统越来越慢,直到死机,但并不能明确是在什么操作上出现的,发生的时间点也没有规律,查看日志或查看数据库也不能定位出问题的代码. 更严重的是内存溢出与数

Java内存泄漏分析与解决方案

Java内存泄漏是每个Java程序员都会遇到的问题,程序在本地运行一切正常,可是布署到远端就会出现内存无限制的增长,最后系统瘫痪,那么如何最快最好的检测程序的稳定性,防止系统崩盘,作者用自已的亲身经历与各位网友分享解决这些问题的办法. 作为Internet最流行的编程语言之一,Java现正非常流行.我们的网络应用程序就主要采用Java语言开发,大体上分为客户端.服务器和数据库三个层次.在进入测试过程中,我们发现有一个程序模块系统内存和CPU资源消耗急剧增加,持续增长到出现java.lang.Ou

Java内存溢出的几种情况

本文通过几段代码模拟实际的内存溢出异常. 文中代码都是基于Oracle公司的HotSpot虚拟机运行的. 1. Java堆溢出 1.1 模拟场景 Java堆用于存储对象,只要不断的创建对象,并保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象, 那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常. package com.lindaxuan.outofmemory; import java.util.ArrayList; import java.util.List; /

Java内存溢出异常(上)

上一篇文章我们讲了JVM运行时数据区域与内存溢出异常,其中对于内存溢出异常这部分将的不够详细,这篇文章将着重讲解Java内存溢出异常的相关知识.如果有没看过上一篇文章的小伙伴们,请点击Java内存区域与内存溢出异常. Java的内存溢出异常主要分为两类:分别是内存溢出和栈溢出.在以下几种情况,会抛出内存异常:Java堆溢出.虚拟机栈和本地方法栈溢出.方法区和运行时常量池溢出.以及本机直接内存溢出,下面讲一一介绍这几类异常. Java堆溢出 在Java内存区域与内存溢出异常中讲过,Java堆主要是

Java静态代码分析工具Infer

Java静态代码分析工具Infer 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.Infer介绍 Infer是Facebook最新开源的静态程序分析工具,用于在发布移动应用之前对代码进行分析,找出潜在的问题.目前Facebook使用此工具分析Facebook的App,包括Android.iOS.Facebook Messenger和Instagram等. Facebook称该工具帮助其每个月检查出应用潜在的数百个Bug,例如一些空指针访问.资源

常用 Java 静态代码分析工具的分析与比较

转载自: http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代

Java内存溢出实例总结

java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下: <img width="492" height="325" src="file:///C:/Users/zpy/AppData/Local/Temp/msohtml1/01/clip_image001.jpg" <="" span="">' v:shapes="_x0000_i1029&q

如何分析android的OOM,与java静态代码分析工具

用MAT分析OOM 很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause.根本原因都在于本应该自动释放的资源,因为代码的错误,而导致某些对象一直被引用(Reference),例如 Android 内存优化,如何避免OOM 文章中提到的Activity 的mContext 引用. 当代码量很庞大的时候,单靠读代码查找错误是很困难的,所以必须借助于工具,这里介绍一款很好用的分析工具MAT. 1.下载MAT http://www.eclipse.org/mat/download