我们有一个应用程序可以正常运行一年。它是一个 web 应用程序,在 Windows Server 2003 Enterprise Edition Service Pack 2 上的 Microsoft Cluster 下的 Tomcat 5.5 + JDK 1.5 下运行。服务器有 11Gb 的 RAM(我知道它没用!)带有以下描述“Physical Address Extension” : 我不知道那是什么意思。
Tomcat服务配置如下参数:-Xmx1024m -Xms128m
自上周以来,该服务不想再启动并停止并显示以下错误消息:“无法分配足够的堆空间”。
我们尝试了几个测试:
java -Xmx1024m -version
=> 失败java -Xmx758m -version
=> 失败java -Xmx512m -version
=> 通过
因此我们可以为最大堆大小使用更少的内存,但这不是一个可接受的解决方法,因为用户数量将在几个月内增加,我们需要将最大堆大小设置为 1024Mb。
我也不明白为什么它工作正常然后突然停止工作!似乎操作系统现在无法分配连续内存,或者其他东西(页面文件大小,用户内存分配,......)
很难知道是否发生了某些变化(操作系统补丁、配置等),因为 Web 应用程序正在客户服务器上运行,而我们无权访问它。
最佳答案
Java 需要连续内存。在 32 位操作系统上,这会将您限制在 Windows 上的 1.2 到 1.4 GB 之间。但是,如果您的内存由于其他正在运行的程序而变得碎片化,您可能会获得更小的内存区域。
你不会在 64 位操作系统上遇到这个问题,你甚至可以为 jVM 分配更多的内存(如果你使用 64 位 JVM)
关于java - 无法为 Java 分配足够的堆空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5788356/