JVM因错误='无法分配内存'(errno = 12)而崩溃 [英] JVM crashes with error='Cannot allocate memory' (errno=12)

查看:3161
本文介绍了JVM因错误='无法分配内存'(errno = 12)而崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的代码因此错误消息而崩溃

My code crashes with this error message

Executing "/usr/bin/java  com.utils.BotFilter"
OpenJDK 64-Bit Server VM warning: INFO: 
os::commit_memory(0x0000000357c80000, 2712666112, 0) failed; 
error='Cannot allocate memory' (errno=12)

没有足够的内存来使Java Runtime Environment继续运行. 本机内存分配(malloc)无法分配2712666112字节来提交保留的内存. 包含更多信息的错误报告文件另存为: /tmp/jvm-29955/hs_error.log`

There is insufficient memory for the Java Runtime Environment to continue. Native memory allocation (malloc) failed to allocate 2712666112 bytes for committing reserved memory. An error report file with more information is saved as: /tmp/jvm-29955/hs_error.log`

这是生成的hs_error.log file的内容:

https://pastebin.com/yqF2Yy4P

崩溃日志中的这一行对我来说似乎很有趣:

This line from crash log seems interesting to me:

Memory: 4k page, physical 98823196k(691424k free), swap 1048572k(0k free)

这是否意味着机器具有内存,但交换空间不足?

Does it mean that the machine has memory but is running out of swap space?

这是崩溃日志中的meminfo,但是我真的不知道如何解释它,就像MemFree和MemAvailable之间有什么区别?此过程需要占用多少内存?

Here is meminfo from the crash log but I don't really know how to interpret it, like what is the difference between MemFree and MemAvailable? How much memory is this process taking?

/proc/meminfo:

MemTotal:       98823196 kB
MemFree:          691424 kB
MemAvailable:    2204348 kB
Buffers:          145568 kB
Cached:          2799624 kB
SwapCached:       304368 kB
Active:         81524540 kB
Inactive:       14120408 kB
Active(anon):   80936988 kB
Inactive(anon): 13139448 kB
Active(file):     587552 kB
Inactive(file):   980960 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1048572 kB
SwapFree:              0 kB
Dirty:              1332 kB
Writeback:             0 kB
AnonPages:      92395828 kB
Mapped:           120980 kB
Shmem:           1376052 kB
Slab:             594476 kB
SReclaimable:     282296 kB
SUnreclaim:       312180 kB
KernelStack:      317648 kB
PageTables:       238412 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    50460168 kB
Committed_AS:   114163748 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      314408 kB
VmallocChunk:   34308158464 kB
HardwareCorrupted:     0 kB
AnonHugePages:  50071552 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      116924 kB
DirectMap2M:     5115904 kB
DirectMap1G:    95420416 kB

推荐答案

可能的解决方案:

  • 减少系统上的内存负载
  • 增加物理内存或交换空间
  • 检查交换后备存储是否已满
  • 在64位操作系统上使用64位Java
  • 减小Java堆大小(-Xmx/-Xms)
  • 减少Java线程数
  • 减小Java线程堆栈大小(-Xss)
  • 使用-XX:ReservedCodeCacheSize =
  • 设置更大的代码缓存
  • 如果您的雄猫上部署了许多上下文战,请尝试减少它们
  • Reduce memory load on the system
  • Increase physical memory or swap space
  • Check if swap backing store is full
  • Use 64 bit Java on a 64 bit OS
  • Decrease Java heap size (-Xmx/-Xms)
  • Decrease number of Java threads
  • Decrease Java thread stack sizes (-Xss)
  • Set larger code cache with -XX:ReservedCodeCacheSize=
  • In case you have many contexts wars deployed on your tomcat try reduce them

这篇关于JVM因错误='无法分配内存'(errno = 12)而崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆