在我的项目实际运行当中,经常会发生tomcat因为内存溢出而导致宕机的问题发生,但是在日志里面只是简单的打印了异常信息,根据这个根本无法得知到底是什么原因导致的内存溢出,而那些JAVA内存分析工具又不能在生产环境里面使用。
所以问问大家在这方面有没有什么好的经验分享下?就是如何去分析TOMCAT宕机的原因
呵呵,问的有点多,大家不吝赐教啊~谢谢大家~!
在我的项目实际运行当中,经常会发生tomcat因为内存溢出而导致宕机的问题发生,但是在日志里面只是简单的打印了异常信息,根据这个根本无法得知到底是什么原因导致的内存溢出,而那些JAVA内存分析工具又不能在生产环境里面使用。
所以问问大家在这方面有没有什么好的经验分享下?就是如何去分析TOMCAT宕机的原因
呵呵,问的有点多,大家不吝赐教啊~谢谢大家~!
用sun自带的内存分析工具jmap导出内存来看看:
jmap -histo pid>a.log
不过生产环境上的确是不太方便,中间会中断一下服务(我在一个服务器上花了大概10分钟导出来过一次,在服务已经无法响应的情况下可以忍痛做一次),出来的结果很直观:
占用内存 对象个数 对象描述
示例数据:
353371288 9652324 char[]
230711112 9612963 java.lang.String
139347160 114865 byte[]
76128096 3172004 java.util.Hashtable$Entry
...
...
一下就能找到到底是哪个占用内存超大。
曾经发现一个高并发访问的jsp默认开启了session问题导致的异常,session在内存中一直积累,最后把tomcat撑爆了。