Tomcat 服务器占用了20G内存 卡死,访问不了,怎么分析原因

筱龙缘 发布于 2014/07/10 21:01
阅读 5K+
收藏 0





加载中
0
叫我刀刀
叫我刀刀
重启一下
筱龙缘
筱龙缘
...
0
Jack_Q
Jack_Q

通过一些java内存分析工具看看内存情况,如jprofile,visualVM等。

在根据具体的情况,设置GC回收,或业务代码优化。

苏大泉
苏大泉
回复 @筱龙缘 : 不用分析工具 靠猜是不行的
wad12302
wad12302
+1
Jack_Q
Jack_Q
回复 @筱龙缘 : 是啊,你先通过工具对tomcat进行内存分析啊。你就知道内存的具体使用情况了。
筱龙缘
筱龙缘
额 我想知道是哪里占用了大量内存
0
采飞扬
采飞扬
怎么不用linux服务器呢?
筱龙缘
筱龙缘
这个做不了主 Boss定的
0
游客
游客
十有八九是泄露了吧。
游客
游客
@筱龙缘 一个一个排查吧。木有好办法 。
筱龙缘
筱龙缘
没有日志 确定不了什么原因
0
伫见燕然
伫见燕然
生成dump文件分析
wxpier
wxpier
回复 @伫见燕然 : 最后,如果Xms 与Xmx真就没有设置那么大的话,最终内存消耗很大的话,我觉得是与NIO有关,只有这块java使用的内存不在java内存管理的范围内。
wxpier
wxpier
回复 @伫见燕然 : 我刚刚做了一次测试,如果真是题主说的,在windows上安装tomcat服务的话,在tomcat启动器中设置initial/max memory pool大小的话,就是设置Xms与Xmx,这两个值就是heap的值,而 jmap导出的就是heap的内容了,大小基本就是heap的大小了。。
wxpier
wxpier
回复 @伫见燕然 : 又怎么知道不是呢?上图中虽然看到heap的地方只有几十,但如果真是这几十是heap的话,dump就没有意义了
伫见燕然
伫见燕然
回复 @wxpier : 搞笑,20个G又不是dump的大小,怎么就不能了?
wxpier
wxpier
得了,20G还生成dump,想累死呀
下一页
0
len
len
  1. 平时占多少内存?占了20G现在有多少访问量
  2. 线程数量是否正常,有没有死循环的可能
  3. 查看一下占用内存最多的对象,分析下引用位置,是不是没有释放。
筱龙缘
筱龙缘
这个是因为一个定时任务引起的 里面起了20个线程去取网络资源
0
len
len
那你是不是有用Map,List这样的集合来存一些全局的东西,以前我做递归抓取的时候遇到过,跑着跑着就吃满了,后来把这些东西改存到Redis里就没有问题了。
len
len
@筱龙缘 并不仅仅是它自己占用,还有可能是它引发的不能回收的对象占用的。你改Redis存这些信息试试吧。多半在这
冷血
冷血
回复 @筱龙缘 : 这也占不了多少内存,问题肯定不是这个。
筱龙缘
筱龙缘
嗯 是啊 两万个13字节的字符串
0
星爷
星爷
dump内存下来分析下,肯定是内存泄露了。
0
星爷
星爷
难道没有这只JVM的最大值,居然20G。
筱龙缘
筱龙缘
是的
0
筱龙缘
筱龙缘

@huaye2007

e2007 

筱龙缘
筱龙缘
回复 @头号大宝贝 : 是给了20G,但是启动时只占了1.6G左右
头号大宝贝
头号大宝贝
初始化给了20G,还问为什么会有20G……
冷血
冷血
汗,内存不是越多越好的。
返回顶部
顶部