我的内存在linux上(没有cache / slab / shm / ipcs)

这是一个8GB RAM(内核3.12)的无头服务器…即使在几天之后,我的内存也很低。 事实上,这个服务器已经OOMed前几天…有些东西正在失去记忆,但我不知道在哪里…

看到下面的输出:

简而言之:

  • 64位系统和操作系统
  • 不是pipe理程序,也不是虚拟机
  • 低空闲的内存
  • 交换使用
  • 低caching
  • 低缓冲区
  • 无效+有效== 1GB?
  • 低ipcs
  • 低shm
  • 低板
  • 约500MB的tmpfs使用
  • 实际上所有进程的总共RSS是262MB
  • 所有进程的HWM小于600MB
  • 我失去了超过6GB的地方…?
 [root @ localhost〜]#cat / proc / meminfo 
 MemTotal:8186440 kB
 MemFree:251188 kB
缓冲区:144 kB
caching:853548 kB
 SwapCached:9988 kB
 Active:480036 kB
无效:529456 kB
 Active(anon):256196 kB
 Inactive(anon):333072 kB
 Active(file):223840 kB
 Inactive(file):196384 kB
 Unevictable:13656 kB
 Mlocked:0 kB
 SwapTotal:4194300 kB
 SwapFree:4092540 kB
脏:356 kB
写回:0 kB
 AnonPages:161576 kB
映射:50116 kB
 Shmem:419812 kB
板:72680 kB
 SReclaimable:50648 kB
 SUnreclaim:22032 kB
 KernelStack:1824 kB
 PageTables:10260 kB
 NFS_Unstable:0 kB
弹跳:0 kB
 WritebackTmp:0 kB
 CommitLimit:8287520 kB
 Committed_AS:1883404 kB
 VmallocTotal:34359738367 kB
 VmallocUsed:91804 kB
 VmallocChunk:34359637332 kB
 HardwareCorrupted:0 kB
 AnonHugePages:0 kB
 HugePages_Total:0
 HugePages_Free:0
 HugePages_Rsvd:0
 HugePages_Surp:0
 Hugepagesize:2048 kB
 DirectMap4k:83180 kB
 DirectMap2M:8296448 kB

 [root @ localhost〜]#ipcs -m 

 ------共享内存段--------
键shmid owner允许字节数字状态      
 0x01123bac 0根600 1000 8                       

 [root @ localhost〜]#df -h
使用的文件系统大小可用使用%
 tmpfs 4.0G 393M 3.6G 10%/ run

 [root @ localhost〜]#为我在/ proc / * /状态; 做grep VmRSS $我; 完成|  awk'{s = s + $ 2} END {print s / 1024}'
 262.375

 [root @ localhost〜]#为我在/ proc / * /状态;  grep VmHWM $ i; 完成|  awk'{s = s + $ 2} END {print s / 1024}'
 526.77

编辑:我已经设置overcommit = 2(禁用),以防万一(我重新启动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]#为我在/ proc / * /状态; 做grep VmRSS $我; 完成|  awk'{s = s + $ 2} END {print s / 1024}'
 434.188
 [root @ localhost linux]#为我在/ proc / * /状态;  grep VmHWM $ i; 完成|  awk'{s = s + $ 2} END {print s / 1024}'
 545.551
 [root @ localhost linux]#cat / proc / meminfo 
 MemTotal:8186440 kB
 MemFree:146576 kB
缓冲区:1728 kB
caching:5212588 kB
 SwapCached:0 kB
 Active:2560112 kB
 Inactive:2874464 kB
 Active(anon):94464 kB
 Inactive(anon):136528 kB
 Active(file):2465648 kB
 Inactive(file):2737936 kB
 Unevictable:9772 kB
 Mlocked:0 kB
 SwapTotal:4194300 kB
 SwapFree:4194300 kB
脏:1436 kB
写回:0 kB
 AnonPages:230032 kB
映射:50540 kB
 Shmem:960 kB
板:316804 kB
 SReclaimable:291712 kB
 SUnreclaim:25092 kB
 KernelStack:1880 kB
 PageTables:11184 kB
 NFS_Unstable:0 kB
弹跳:0 kB
 WritebackTmp:0 kB
 CommitLimit:8287520 kB
 Committed_AS:1160812 kB
 VmallocTotal:34359738367 kB
 VmallocUsed:91676 kB
 VmallocChunk:34359582672 kB
 HardwareCorrupted:0 kB
 AnonHugePages:0 kB
 HugePages_Total:0
 HugePages_Free:0
 HugePages_Rsvd:0
 HugePages_Surp:0
 Hugepagesize:2048 kB
 DirectMap4k:91372 kB
 DirectMap2M:8288256 kB

所以,我使用8GB:

  • 5GB被caching
  • 0.5MB的tmpfs
  • 450MB的RSS
  • 〜1GB平板+页面+任何(在meminfo中)

我仍然是1.5GB的短 …这是一个内核泄漏? 或这是怎么回事?

编辑2:我在另一个primefaces板上有相同的问题

我也检查kmemleak是否看到了什么,但没有…我没有想法…

编辑3:更新到内核3.17.2似乎已经解决了这个问题,但我仍然不知道如何跟踪这些内存泄漏…

lkml认为它可能是https://lkml.org/lkml/2014/10/15/447 ,但是这个补丁不在3.17.2中,并且thp分配并不指向那个方向

然而,/ proc kpageflags可能会显示哪些部分分配了哪些页面,这可能会有所帮助。 在内核源码中的tools / vm / page-types.c中,可能会保存一些关于kpageflags二进制输出结构的信息。