JVM在Windows Server 2008 R2下停留在2GB处

4

我有一个关于Java应用程序的问题。在Windows Server 2008 R2(64位)下使用64位JVM(1.60.0_20),应用程序在分配了2GB内存后就会挂起,即使将JVM设置更改为分配更多内存(-Xmx5000m)并等待超过12小时,它也无法超过这个标记。这是在一台拥有7.5GB可用内存的EC2实例上。

1个回答

1

卡住了?没有抛出“OutOfMemoryError”吗? 如果您从2GB堆(“-Xms2g -Xmx2g”)开始,您能否启动应用程序?

我想知道您是否遇到了实例可用内存的限制。它是小实例吗?由于使用的内存量远远超过物理内存可用量,因此它将开始交换,导致系统崩溃。也许您需要一个大内存实例。


我还没有尝试2G、2G的配置,但我有一个高内存实例,大约还剩下4G RAM可用。它并没有抛出任何异常。它只是坐在那里盯着我的脸,毫无生气和动静!这是否与GC有关? - user349026
我的理论是该应用程序正在使用比物理内存更多的内存。这意味着机器不断地将内存页面交换/分页到磁盘上,从而使事情变得非常缓慢,以至于它看起来可能被卡住了。我不确定如何在Windows上验证这一点——这是在任务管理器/性能中吗?提交费用?也有可能这是一个误导,存在某些应用程序问题导致死锁。 - Sean Owen
谢谢您的回复,但问题变得更加严重了。看起来线程池有问题。我的应用程序是一个多线程应用程序,它会挂起,因为线程池执行器不会分配新线程。 - user349026

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接