2012-02-28 57 views
0

我做内存管理分析我的Java Web应用程序,分析内存管理

开始我的tomcat之前在RAM中的可用内存大约为595 MB,一旦我开始空闲内存变为151 MB服务器。当我拿起堆转储时,对象占用了262 MB。

那么单独的tomcat会剩下181 MB吗?

另一个问题是,我跑500负载测试用户。空闲内存达到8MB,当我在这里采取堆转储时,大约是265MB。所以可用空间151MB减少到8MB,可能是什么原因

请注意,我用top命令来检查RAM中的空闲内存。

回答

0

可用内存是内存,程序或磁盘缓存未使用的内存。磁盘高速缓存的大小取决于您访问或删除了哪些文件,并且是内存消耗不佳的指示。

Java使用相当多的内存启动。其中大部分是共享的。 Tomcat可能是一个相对复杂的应用程序,具体取决于您加载的内容,但为JVM使用181 MB并且Tomcat对我来说似乎合理。

+0

谢谢彼得。关于负载测试期间的第二个问题,空闲内存变得非常低,但是当我进行堆转储时,在负载测试和负载测试期间进行比较时,我看不到大小上的巨大差异。在负载测试期间可能会导致内存不足的原因是什么? – 2012-02-28 11:09:50

+0

您是否在负载测试或负载测试后进行转储?如果你在测试之前和之后进行比较,除非你有内存泄漏,否则你会期望它是相同的。 – 2012-02-28 11:16:15

+0

我在负载测试期间拿走了 – 2012-02-28 11:32:49

0

这一切都取决于你如何计算空闲内存(Profiler?TaskManager?编程?)和你正在评估的内存(堆?非堆?等等)。Tomcat本身并不占用太多内存我没记错,但基本设置绝对不应该占用180Mb)

+0

我用'top'命令计算RAM中的空闲内存。 – 2012-02-28 11:05:28

+0

好的,这可能不是计算实际记忆的最佳方法。但更重要的是,堆是一个“增长”的内存:它以最小内存量开始,然后每次需要比当前可用内存更多的内存时,它会增加其分配的内存(直到达到最大值)。这意味着您的对象可能需要100Mb,但堆可能使用128Mb。你有28Mb未使用。您应该多读一些关于Java内存和Java GC的内容。 – 2012-02-28 11:11:32