Java HotSpot(TM)64位服务器VM警告

Gre*_*mar 37 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)
Run Code Online (Sandbox Code Playgroud)

我需要弄明白实际发生了什么?什么警告意味着什么?

Man*_*sha 38

Java Runtime Environment没有足够的内存来继续.

本机内存分配(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 HotSpot(TM)64-位服务器VM警告:忽略选项MaxPermSize

  • 这个答案是JVM生成的日志文件中建议的复制/粘贴.引用这个文件会更诚实......但是它有效(我增加了机器上的物理RAM量,实际上是虚拟机).谢谢! (11认同)
  • @Steffen 减少最大堆空间会有所帮助的原因是它限制了 Java VM 以防止它请求比操作系统可用的更多内存。导致错误的情况是 JVM 正在请求操作系统没有的内存(意味着 JVM 仍然低于它的最大阈值)。 (4认同)

小智 12

Java无法分配足够的内存,即它不是Java的堆限制,而是OS不再有可用于Java的内存.检查机器是否没有内存不足.首先清理ram或增加ram然后检查是否存在内存不足错误然后增加堆大小:

-Xms128m min(堆大小)

-Xmx512m 最大(堆大小)

-XX:MaxPermSize 最大(烫发尺寸)