一:背景 1. 讲故事 上个月有位朋友通过博客园的短消息找到我,说他的程序存在内存溢出情况,寻求如何解决. 要解决还得通过 windbg 分析啦. 二:Windbg 分析 1. 为什么会内存溢出 大家都知道内存溢出对应着 .NET 中的 OutOfMemoryException 异常,这种异常有可能是托管代码手工抛出的,也有可能是CLR层面抛出的,言外之意就是可以通过两种方式排查. 托管线程是否挂载着异常? 0:000> !t ThreadCount: 23 UnstartedThread: 0…
一:背景 1. 讲故事 前几天有位朋友加wx求助说他的程序最近总是出现内存溢出,很崩溃,如下图: 和这位朋友聊下来,发现他也是搞医疗的,哈哈,.NET 在医疗方面还是很有市场的,不过对于内存方面出的问题,我得先祈祷一下千万不要是非托管... 废话不多说,上 windbg,看能不能先救个急. 二: windbg 分析 1. 找出异常对象 如果内存溢出了,大家应该知道 C# 会抛一个 OutOfMemoryException 异常,而且还会附加到那个执行线程上,所以先用 !t 命令调出当前的所有托管…
概述 jvm中除了程序计数器,其他的区域都有可能会发生内存溢出 内存溢出是什么? 当程序需要申请内存的时候,由于没有足够的内存,此时就会抛出OutOfMemoryError,这就是内存溢出 内存溢出和内存泄漏有什么区别? 内存泄漏是由于使用不当,把一部分内存"丢掉了",导致这部分内存不可用. 当在堆中创建了对象,后来没有使用这个对象了,又没有把整个对象的相关引用设为null.此时垃圾收集器会认为这个对象是需要的,就不会清理这部分内存.这就会导致这部分内存不可用. 所以内存泄漏会导致可用…
我们继续java内存溢出分析(一)的分析,点击Details>按钮,显示如下图,我们发现有一个对象数量达到280370216个,再点击其中的List objects 点击后,显示下图 至此,我们发现playersOrder这个List存入了非常多的数据,可能是循环控制问题导致,最后查出问题解决.…
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 -----------…
原文地址:Java 内存溢出分析 博客地址:http://www.moonxy.com 一.前言 Java 的 JVM 的内存一般可分为 3 个区:堆(heap).栈(stack)和方法区(method). 1.1 堆区 1)存储的全部是对象,每个对象都包含一个与之对应的 Class 的信息,Class 的目的是得到操作指令: 2)JVM 只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身. 1.2 栈区 1)每个线程包含一个栈区,栈中只保存基础数据类型的对象和…
一.jmap的使用以及内存溢出分析 前面通过jstat可以对jvm堆的内存进行统计分析,而jmap可以获取到更加详细的内容,如:内存使用情况的汇总.对内存溢出的定位与分析 1.查看内存使用情况 jmap -heap 29720 2.查看内存中对象数量及大小  #查看所有对象,包括活跃以及非活跃的  jmap ‐histo <pid> | more #查看活跃对象  jmap ‐histo:live <pid> | more #查看活跃对象 jmap -histo:live 2972…
事故背景 今天客户说风控项目有个别用户查询不到数据不是报错就是一直卡在那里,我就去那个接口看了下. 一看项目日志今天的都几个g了,平常也就几百兆吧,很明显出了问题. 请求接口后使用命令tail -f 实时查看日志,发现有个东西一个在刷屏,几分钟了还在刷. 把日志切割后查看还发现了堆内存溢出错误,使用命令 free -m 发现服务器4g内存几乎已经占满了. [2018-07-12 14:06:46,259 ERROR]:[http-bio-443-exec-12] - 错误提示 :org.spri…
MAT 不是一个万能工具,它并不能处理所有类型的堆存储文件.     不同厂家的 JVM 所生成的堆转储文件在数据存储格式以及数据存储内容上有很多区别,但是比较主流的厂家和格式,例如 Sun, HP, SAP 所采用的 HPROF 二进制堆存储文件,以及 IBM 的 PHD 堆存储文件等都能被很好的解析.     另外,有很多的工具,例如 JMap,JConsole 都可以帮助我们得到一个堆转储文件. 1.一键式的堆存储分析功能     生成分析报告 首先,启动安装配置好的 Memory Ana…
公司业务系统在进行压力测试时,压测24小时后系统发生内存溢出.经过分析读dump文件,发现org.hibernate.stat.StatisticsImpl类的hashmap类型的变量存储了大量数据(3百多万条),此成员变量消耗了2g的内存.如下图: org.hibernate.stat.StatisticsImpl类是性能统计的功能实现,当hibernate.generate_statistics配置为true时就会启用此功能.因此此功能在生产环境下必须关闭,否则此处消耗的系统资源会影响系统性…