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 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?