我在Tomcat中部署的Java应用程序存在严重问题:
使用几个小时后,RSS(驻留内存大小)为13GB,VSZ(虚拟内存大小)为15 GB。
该应用程序有2个servlet:一个用于一些简单HTTP请求的Spring DispatcherServlet和用于处理WebServices的CXFServlet。该应用程序没有任何自定义本机代码。
用过的磁头大约是2 GB,所以这不是问题。
返回4 MB响应的SOAP请求会产生500 MB的RSS增长。运行垃圾收集器对RSS没有影响。
您是否知道此内存增加的任何可能原因或任何可以帮助我调查此问题的工具。感谢。
pmap输出
已映射:14226976K可写/私有:13772580K共享:286844K
10个最大的“匿名”区块:
0000000720000000 3670016 rw--- 0000000000000000 000:00000 [ anon ]
0000000000601000 2529344 rw--- 0000000000000000 000:00000 [ anon ]
0000000710000000 173504 rw--- 0000000000000000 000:00000 [ anon ]
00007f7484000000 131072 rw--- 0000000000000000 000:00000 [ anon ]
00007f7414000000 131068 rw--- 0000000000000000 000:00000 [ anon ]
00007f7424000000 131068 rw--- 0000000000000000 000:00000 [ anon ]
00007f7434000000 131068 rw--- 0000000000000000 000:00000 [ anon ]
00007f7494000000 131068 rw--- 0000000000000000 000:00000 [ anon ]
00007f737c000000 131024 rw--- 0000000000000000 000:00000 [ anon ]
00007f738c000000 131024 rw--- 0000000000000000 000:00000 [ anon ]
答案 0 :(得分:0)
使用JVisualVM(java附带的分析工具)可以很好地了解JVM内部的情况。手册可以在这里找到。
还有其他更好的工具(想到JProfiler 7),但他们通常需要支付许可费。您可以尝试免费试用JProfiler。
答案 1 :(得分:0)
究竟是什么问题?操作系统是否交换?也许你只需要阅读这个问题的接受答案:Virtual Memory Usage from Java under Linux, too much memory used
如果您正在使用NIO,那么它也可能是堆外部的内存消耗源,如下所述: Why does the Sun JVM continue to consume ever more RSS memory even when the heap, etc sizes are stable?