这是具有 8GB RAM(内核 3.12)的无头服务器...即使只使用了几天,我的内存就不足了。事实上,这台服务器几天前就已经 OOM 了...有些东西正在丢失内存,但我不知道在哪里......
参见以下输出:
简而言之:
- 64位系统和操作系统
- 不是虚拟机管理程序也不是虚拟机
- 可用内存不足
- 正在使用交换
- 低缓存
- 低缓冲
- 非活动+活动 == 1GB ???
- 低 ipc
- 低共享内存
- 低板
- ~500MB tmpfs 使用量
- 事实上所有进程的 RSS 总和是 262MB
- 并且所有进程的 HWM 小于 600MB
- 我在某处丢失了超过 6GB 的数据……?
[root@localhost ~]# cat /proc/meminfo 内存总量:8186440 kB 可用内存:251188 kB 缓冲区:144 kB 缓存:853548 kB 交换缓存:9988 kB 活动:480036 kB 不活动:529456 kB 活跃(匿名):256196 kB 不活跃(匿名):333072 kB 活动(文件):223840 kB 不活动(文件):196384 kB 不可驱逐:13656 kB 锁定:0 kB 交换总量:4194300 kB 可用交换空间:4092540 kB 脏:356 kB 回写:0 kB 匿名页面:161576 kB 映射:50116 kB 内存:419812 kB 板坯:72680 kB 可回收:50648 kB 取消回收:22032 kB 内核堆栈:1824 kB 页表:10260 kB NFS_不稳定:0 kB 跳出率:0 kB 回写时间:0 kB 提交限制:8287520 kB 已提交:1883404 kB Vmalloc总计:34359738367 kB 已使用 Vmalloc:91804 kB VmallocChunk:34359637332 kB 硬件损坏:0 kB AnonHugePages:0 kB 大页面总数:0 HugePages_Free:0 HugePages_Rsvd:0 HugePages_Surp:0 大页面大小:2048 kB DirectMap4k:83180 kB DirectMap2M:8296448 kB [root@localhost ~]# ipcs -m ------ 共享内存段 -------- 密钥 shmid 所有者权限字节数 nattch 状态 0x01123bac 0 根 600 1000 8 [root@localhost ~]# df -h 文件系统大小已使用可用使用率%安装于 tmpfs 4.0G 393M 3.6G 10% /运行 [root@localhost ~]# for i in /proc/*/status ; do grep VmRSS $i; done | awk '{ s = s + $2 } END { print s / 1024 }' 262.375 [root@localhost ~]# for i in /proc/*/status ; do grep VmHWM $i; done | awk '{ s = s + $2 } END { print s / 1024 }' 526.77
编辑:我已经设置了 overcommit=2(已禁用)以防万一(我两天前重新启动了)
[root@localhost linux]# cat /proc/sys/vm/overcommit_memory 2 [root@localhost linux]# df -h | grep tmpfs devtmpfs 3.9G 0 3.9G 0%/dev tmpfs 4.0G 0 4.0G 0%/dev/shm tmpfs 4.0G 532K 4.0G 1% /运行 tmpfs 4.0G 0 4.0G 0%/sys/fs/cgroup tmpfs 4.0G 0 4.0G 0% /tmp tmpfs 4.0G 532K 4.0G 1%/var/spool/postfix/run/saslauthd [root@localhost linux]# for i in /proc/*/status ; do grep VmRSS $i; done | awk '{ s = s + $2 } END { print s / 1024 }' 434.188 [root@localhost linux]# for i in /proc/*/status ; do grep VmHWM $i; done | awk '{ s = s + $2 } END { print s / 1024 }' 545.551 [root@localhost linux]# cat /proc/meminfo 内存总量:8186440 kB 可用内存:146576 kB 缓冲区:1728 kB 缓存:5212588 kB 交换缓存:0 kB 活动:2560112 kB 不活动:2874464 kB 活跃(匿名):94464 kB 不活跃(匿名):136528 kB 活动(文件):2465648 kB 不活动(文件):2737936 kB 不可驱逐:9772 kB 锁定:0 kB 交换总量:4194300 kB 可用交换空间:4194300 kB 脏:1436 kB 回写:0 kB 匿名页面:230032 kB 映射:50540 kB 内存:960 kB 板坯:316804 kB 可回收:291712 kB 取消回收:25092 kB 内核堆栈:1880 kB 页表:11184 kB NFS_不稳定:0 kB 跳出率:0 kB 回写时间:0 kB 提交限制:8287520 kB 已提交:1160812 kB Vmalloc总计:34359738367 kB Vmalloc已用:91676 kB VmallocChunk:34359582672 kB 硬件损坏:0 kB AnonHugePages:0 kB 大页面总数:0 HugePages_Free:0 HugePages_Rsvd:0 HugePages_Surp:0 大页面大小:2048 kB DirectMap4k:91372 kB DirectMap2M:8288256 kB
因此,我使用 8GB:
- 5GB 已缓存
- 0.5MB tmpfs
- 450MB RSS
- ~1GB slab+pages+其他(在 meminfo 中)
我仍然短1.5GB...这是内核泄漏吗?或者这里发生了什么事?
编辑2:我在另一个 Atom 板上遇到了同样的问题
我还检查了 kmemleak 是否看到了什么,但什么也没看到...我没有主意了...
编辑3:更新到内核3.17.2似乎已经解决了这个问题,但我仍然不知道如何追踪这些内存泄漏......
答案1
lkml 认为可能是https://lkml.org/lkml/2014/10/15/447,但该补丁不在 3.17.2 中,并且 thp 分配没有指向那个方向
但是,/proc kpageflags 可能显示哪个部分分配了哪些页面,所以这可能会有所帮助。在内核源代码中的 tools/vm/page-types.c 中,可能包含有关 kpageflags 二进制输出结构的一些信息。