Я запускаю сервер загрузки в экземпляре 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=