我的内存在 Linux 上去哪儿了(没有缓存/slab/shm/ipcs)

我的内存在 Linux 上去哪儿了(没有缓存/slab/shm/ipcs)

这是具有 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 二进制输出结构的一些信息。

相关内容