On a freshly installed Linux
machine, I find my application will crash unexpectly:
==5611==AddressSanitizer's allocator is terminating the process instead of returning 0
==5611==If you don't like this behavior set allocator_may_return_null=1
==5611==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:216 "((0)) != (0)" (0x0, 0x0)
#0 0x7f7dc13b94a2 (/lib64/libasan.so.5+0xf94a2)
#1 0x7f7dc13d60a9 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan
.so.5+0x1160a9)
#2 0x7f7dc13bf3d6 (/lib64/libasan.so.5+0xff3d6)
#3 0x7f7dc13bf43a (/lib64/libasan.so.5+0xff43a)
#4 0x7f7dc12e9319 (/lib64/libasan.so.5+0x29319)
#5 0x7f7dc12e6f56 (/lib64/libasan.so.5+0x26f56)
#6 0x7f7dc13adeba in malloc (/lib64/libasan.so.5+0xedeba)
......
After debugging, the root cause is memory not enough. This is the memory usage in idle state:
The reason for memory usage is so high even in idle state is related to huge pages configuration:
$ cat /etc/default/grub
......
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rhgb quiet default_hugepagesz=1G hugepagesz=1G hugepages=100"
After shrinking huge pages usage, the application runs smoothly. About huge pages, this post is a good reference.