一次虚拟内存排查经历
原文中文,约10300字,阅读约需25分钟。发表于: 。事情的起因是这样的,我最近在给silly增加prometheus数据库支持。 在测试过程中发现,在docker ... 阅读更多
最近在给silly增加prometheus数据库支持时,发现在docker中,silly占用了将近110MiB虚拟内存,而在宿主机中只有48.32MiB。通过查看虚拟内存分配和系统调用,发现一些大的匿名内存段和jemalloc分配的内存大小非常接近。进一步分析发现,这是glibc的一个特性,用于提高性能。同时还发现了一个奇怪的现象,一块大内存包含了一个文件的内存映射,经过验证发现是因为jemalloc在mmap分配内存后立即使用munmap释放了这块地址空间。这提示我们在监控内存分配时需要同时监控mmap和munmap系统调用。