weixin_42350615 2010-01-28 20:47
浏览 259
已采纳

关于如何找出内存溢出原因

在我的项目实际运行当中,经常会发生tomcat因为内存溢出而导致宕机的问题发生,但是在日志里面只是简单的打印了异常信息,根据这个根本无法得知到底是什么原因导致的内存溢出,而那些JAVA内存分析工具又不能在生产环境里面使用。
所以问问大家在这方面有没有什么好的经验分享下?就是如何去分析TOMCAT宕机的原因

呵呵,问的有点多,大家不吝赐教啊~谢谢大家~!

  • 写回答

1条回答 默认 最新

  • 山月无涯 2010-01-28 23:17
    关注

    用sun自带的内存分析工具jmap导出内存来看看:
    jmap -histo pid>a.log

    不过生产环境上的确是不太方便,中间会中断一下服务(我在一个服务器上花了大概10分钟导出来过一次,在服务已经无法响应的情况下可以忍痛做一次),出来的结果很直观:

    占用内存 对象个数 对象描述

    示例数据:

    Size Count Class description

    353371288 9652324 char[]
    230711112 9612963 java.lang.String
    139347160 114865 byte[]
    76128096 3172004 java.util.Hashtable$Entry
    ...
    ...

    一下就能找到到底是哪个占用内存超大。
    曾经发现一个高并发访问的jsp默认开启了session问题导致的异常,session在内存中一直积累,最后把tomcat撑爆了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 计算二重积分∫∫e^(x+y)dxdy,其中0≤x≤1,0≤y≤1,试分别用复合辛普森公式(取n=4)以及高斯求积公式(取n=4)计算积分 给出matlab程序
  • ¥15 opencv 无法读取视频
  • ¥15 用matlab 实现通信仿真
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))
  • ¥20 5037端口被adb自己占了
  • ¥15 python:excel数据写入多个对应word文档
  • ¥60 全一数分解素因子和素数循环节位数
  • ¥15 ffmpeg如何安装到虚拟环境
  • ¥188 寻找能做王者评分提取的