2017-10-18 140 views
0

我的代碼崩潰與此錯誤消息JVM崩潰,錯誤= '無法分配存儲器'(錯誤= 12)

`執行 「的/ usr/bin中/ JAVA com.utils.BotFilter」 OpenJDK的64位服務器VM警告:INFO:os :: commit_memory(0x0000000357c80000,2712666112,0)失敗;錯誤='無法分配內存'(errno = 12)

沒有足夠的內存讓Java運行時環境繼續運行。 本機內存分配(malloc)未能爲提交保留內存分配2712666112個字節。 更多信息的錯誤報告文件保存爲: 的/ tmp/JVM-29955/hs_error.log`

Here is the content of the generated hs_error.log file: 

https://pastebin.com/yqF2Yy4P

這從崩潰日誌行似乎對我有意思:

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

這是否意味着機器有內存但交換空間不足?

這是來自崩潰日誌的meminfo,但我真的不知道如何解釋它,就像MemFree和MemAvailable有什麼不同?這個過程需要多少內存?

的/ 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 
+0

你有'2712666112'字節嗎? –

回答

0

可能的解決方案:

  • 系統上減少存儲器負荷
  • 增加物理內存或交換空間
  • 檢查交換後備存儲已滿
  • 在64位操作系統上使用64位Java
  • 減少Java堆大小(-Xmx/-Xms)的Java
  • 減少數量邊線
  • 減少Java線程堆棧大小(-Xss)
  • 設置較大的代碼高速緩存與-XX:ReservedCodeCacheSize =