绝对的说法都是错误的。

谁吃了我的内存

还是要出去多溜达放开自己,工作两年有余也没人给我分享这么多技术之外的东西,回到家正思考着人生,丫的服务器莫名奇妙报内存使用率超高,监控上没啥异常的进程但是整体的内存使用率非常高,服务器上看来监控是没问题的,cat /proc/meminfo 仔细研究了一番发现几个重要的指标都不是特别的夸张,加起来也不过 15G,但是..:

PageTables:     113739060 kB

这个东西主要和 linux 的内存映射有关,显然不是因为使用的物理内存太多导致的,脑子一热非常想爆粗口,当初为了减少几个系统调用,写文件用 mmap,然后占用的虚拟内存现在已经特别大了,/proc/<pid>/status 里的 VmPTE 能确定我们的进程无误了,按照当前的使用情况算下来差不多也就是这个数,但是理论上最坏的情况可以直接打爆内存的,也不知道效果怎样,想想就刺激 ^_^

最简单的解决办法是使用 mmap.MAP_HUGETLB,但是得动系统的配置;还有一种是不再使用 mmap,测下来其实 mmap 并没有很明显的性能提升,mmap 的写入性能会随着时间的推移而些许变慢,和 pagetables/mmu/tlb 脱不了干系,其实我对写代码是拒绝的,再想起来要自己运维又更特么烦,正好重构下所以..

关于 huge page 这个配置确实得再考虑下,可能会对性能有一些提升,也可能会有坑,见过凌晨四点的上海也该躺尸了..