无法为Java分配足够的堆空间

Eri*_*aix 4 java memory garbage-collection memory-management windows-server-2003

我们有一个运行良好一年的应用程序.它是一个Web应用程序,在Windows Server 2003企业版Service Pack 2上的Microsoft Cluster下的Tomcat 5.5 + JDK 1.5下运行.服务器具有11Gb的RAM(我知道它没用!),具有以下描述"物理地址扩展" :我不知道这意味着什么.

Tomcat服务配置了以下参数: -Xmx1024m -Xms128m

从上周开始,该服务不再需要启动并停止并显示以下错误消息:"无法分配足够的堆空间".

我们尝试了几个测试:

  • java -Xmx1024m -version =>失败
  • java -Xmx758m -version =>失败
  • java -Xmx512m -version =>通过

因此,我们可以使用更少的内存来获得最大堆大小,但这不是一个可接受的解决方法,因为用户数量将在几个月内增加,我们需要将最大堆大小设置为1024Mb.

另外我不明白为什么它工作正常然后突然停止工作!似乎操作系统现在无法分配连续内存或其他内容(页面文件大小,用户内存分配......)

由于Web应用程序在客户服务器上运行而我们无法访问它,因此很难知道某些内容是否发生了变化(操作系统补丁,配置等).

Pet*_*rey 6

Java需要连续的内存.在32位操作系统上,这限制了Windows在1.2到1.4 GB之间.但是,如果由于正在运行的其他程序而导致内存碎片化,则可能会占用更小的内存区域.

使用64位操作系统不会出现此问题,您甚至可以为jVM分配更多内存(如果使用64位JVM)