一次虚拟内存排查经历
原文中文,约10300字,阅读约需25分钟。发表于: 。事情的起因是这样的,我最近在给silly增加prometheus数据库支持。 在测试过程中发现,在docker ... 阅读更多 The post 一次虚拟内存排查经历 first appeared on 重归混沌的BLOG.
最近在给silly增加prometheus数据库支持时发现,在docker中,silly刚起动就占了将近110MiB虚拟内存。通过查看虚拟内存的分配,发现其中一块内存大小和jemalloc向应用程序分配的内存大小非常接近,怀疑这块内存就是jemalloc所使用的虚拟内存大小。通过使用strace确认了这一点。在docker中查看110MiB内存来源时发现一大块内存一个字节都没有使用,怀疑是glibc的一个bug,但后来发现这是glibc的一个特性。同时还发现一个奇怪的现象,一块大内存包含了一个文件的内存映射,经过分析发现是jemalloc在mmap分配了一块内存后,随即使用munmap给释放了。这给了一个提示,监控内存分配时需要同时监控mmap和munmap系统调用。