无法为Java分配足够的堆空间
作者:互联网
我们有一个运行良好一年的应用程序.它是一个Web应用程序,在Windows Server 2003 Enterprise Edition 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应用程序在客户服务器上运行而我们无法访问它,因此很难知道某些内容是否发生了变化(操作系统补丁,配置等).
解决方法:
Java需要连续的内存.在32位操作系统上,这限制了Windows在1.2到1.4 GB之间.但是,如果由于正在运行的其他程序而导致内存碎片化,则可能会占用更小的内存区域.
使用64位操作系统不会出现此问题,您甚至可以为jVM分配更多内存(如果使用64位JVM)
标签:java,memory-management,memory,garbage-collection,windows-server-2003 来源: https://codeday.me/bug/20190614/1237370.html