Назад | Перейти на главную страницу

При выделении собственной памяти (mmap) не удалось сопоставить байты для фиксации зарезервированной памяти

Я запускаю сервер загрузки в экземпляре AWS t2.micro, и я настроил максимальную кучу 512 МБ и минимальную кучу 256 МБ для своего java-процесса. Я выполняю процесс миграции в одном потоке, который загружает файлы (размером <50 МБ) с диска Google. Но когда я запускаю его, я получаю следующую ошибку

error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 33558528 bytes for committing reserved memory.

Вот выдержки из hs_err_pid13942.log

Аргументы ВМ:

jvm_args: -Xms256m -Xmx512m -XX:PermSize=32m -XX:MaxPermSize=64m -XX:+HeapDumpOnOutOfMemoryError

Вот мой меминфо

/proc/meminfo:
MemTotal:        1016324 kB
MemFree:           58792 kB
Buffers:             344 kB
Cached:            15984 kB
SwapCached:            0 kB
Active:           899232 kB
Inactive:          14664 kB
Active(anon):     897692 kB
Inactive(anon):      332 kB
Active(file):       1540 kB
Inactive(file):    14332 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                72 kB
Writeback:             0 kB
AnonPages:        897608 kB
Mapped:             6284 kB
Shmem:               416 kB
Slab:              22276 kB
SReclaimable:      10960 kB
SUnreclaim:        11316 kB
KernelStack:        1408 kB
PageTables:         7460 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      508160 kB
Committed_AS:     881084 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        4664 kB
VmallocChunk:   34359727628 kB
HardwareCorrupted:     0 kB
AnonHugePages:    591872 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       28672 kB
DirectMap2M:     1150976 kB

Вот информация о процессоре

/proc/cpuinfo:
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 63
model name      : Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz
stepping        : 2
microcode       : 0x25
cpu MHz         : 2394.552
cache size      : 30720 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm xsaveopt fsgsbase bmi1 avx2 smep bmi2 erms invpcid
bogomips        : 4789.10
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

Memory: 4k page, physical 1016324k(58792k free), swap 0k(0k free)

Я вижу, что свободно 58 МБ, а также я вижу достаточно свободной памяти при мониторинге с помощью команды 'free -h' в экземпляре. Поэтому я не понимаю, почему вообще возникла эта ошибка. Может ли кто-нибудь объяснить мне причину, а также что я делаю не так с конфигурацией памяти?

Похоже, приложение выделяет память из кучи прямым доступом к памяти (выделение собственной памяти (mmap)).

Вы можете запустить приложение с опцией -XX: MaxDirectMemorySize = 55m (по умолчанию в Java 7 и 8 0).

Possible solutions:

  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=