我有一个tomcat作为我的网络服务器,它使用给定的错误自动停止 -
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f16a8405000, 12288, 0) failed; error='Cannot allocate memory' (errno=12)
我需要弄明白实际发生了什么?什么警告意味着什么?
答案 0 :(得分: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-Bit Server VM warning: ignoring option MaxPermSize
答案 1 :(得分:12)
Java无法分配足够的内存,即它不是Java的堆限制,而是OS不再有可用于Java的内存。检查机器是否没有内存不足。 首先清理ram或增加ram然后检查是否存在内存不足错误然后增加堆大小:
-Xms128m
min(堆大小)
-Xmx512m
max(堆大小)
-XX:MaxPermSize
max(烫发大小)
答案 2 :(得分:0)
Java 运行时环境的内存不足。
我遇到了如下所示的相同问题。
<块引用>OpenJDK 64 位服务器 VM 警告:信息: os::commit_memory(0x00000000f80f7000, 20729856, 0) 失败; error='无法分配内存' (errno=12)
我使用以下步骤解决了这个问题。
有进程挂在他们在 /tmp 上访问过的文件
使用 lsof 来检查:
lsof | grep deleted
它将列出进程,现在您可以杀死那些将为您释放空间的进程。