Java HotSpot(TM)64位服务器虚拟机警告

Java HotSpot(TM)64位服务器虚拟机警告,java,Java,我有一个tomcat作为我的web服务器,它会随着给定的错误自动停止- Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f16a8405000, 12288, 0) failed; error='Cannot allocate memory' (errno=12) 我需要弄清楚到底发生了什么?警告意味着什么?Java无法分配足够的内存,也就是说,阻碍Java的不是堆限制,而是操作系统无法为Jav

我有一个tomcat作为我的web服务器,它会随着给定的错误自动停止-

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f16a8405000, 12288, 0) failed; error='Cannot allocate memory' (errno=12)

我需要弄清楚到底发生了什么?警告意味着什么?

Java无法分配足够的内存,也就是说,阻碍Java的不是堆限制,而是操作系统无法为Java提供更多的内存。检查机器内存是否不足。 首先清理ram或增加ram,然后再次检查是否存在内存不足错误,然后增加堆大小:

-Xms128m
min(堆大小)

-Xmx512m
最大值(堆大小)


-XX:MaxPermSize
max(perm size)

内存不足,Java运行时环境无法继续

本机内存分配(malloc)无法分配xxxxx字节以提交保留内存

可能的原因:
1.系统的物理RAM或交换空间不足
2.在32位模式下,达到了进程大小限制

可能的解决方案:
1.减少系统上的内存负载
2.增加物理内存或交换空间
3.检查掉期支持存储是否已满
4.在64位操作系统上使用64位Java
5.减小Java堆大小(-Xmx/-Xms)
6.减少Java线程的数量
7.减少Java线程堆栈大小(-Xss)
8.使用-XX:ReservedCodeCacheSize=

设置更大的代码缓存
如果您使用的是JAVA-8,请参阅:

JAVA运行时环境的内存不足

我面临的问题如下所示

OpenJDK 64位服务器虚拟机警告:信息: os::提交_内存(0x00000000f80f7000,20729856,0)失败; 错误=“无法分配内存”(errno=12)

我通过以下步骤解决了这个问题

有些进程挂起它们在/tmp上访问的文件

使用lsof检查:

lsof | grep deleted

它将列出进程,现在您可以杀死那些将为您释放空间的进程。

操作系统是否可能重复?它是否有足够的资源(RAM?)。。在linux上,请参阅ubuntu 14.04操作系统,16 GB服务器i在从apache运行java时遇到问题(类似错误)。所描述的修复。mastadminchat03@PRDMASTCHAT03:~$free:total=14361104,used:6188292,free:8172812,shared:428,buffers=57396,cached=1233592这个答案是JVM生成的日志文件中建议的内容的复制/粘贴。引用这个文件会更诚实。。。但它是有效的(我增加了机器上的物理RAM量,实际上是一个虚拟机)。谢谢为什么应该是使用-Xms/-Xmx减少(!!)Java堆空间或使用-Xss减少Java线程堆栈空间的解决方案之一。我希望这些值中的一个(或两个)必须增加…@Steffen减少最大堆空间会有所帮助的原因是它限制java虚拟机,以防止它请求比操作系统可用内存更多的内存。导致错误的情况是JVM请求操作系统没有的内存(这意味着JVM仍在其最大阈值之下)。也可能存在过度限制设置问题,这可能导致加载的计算机对可用内存过于悲观,并拒绝分配您的请求。我遇到这个问题是因为一个应用程序自身分叉,并且在每个进程中都复制了相同的内存页。即使它们是在写上复制的,但系统只能考虑内存使用情况,就像所有这些内存页被复制一样。