cgroup rss的内存远高于docker容器中所有进程的内存使用情况摘要



我有一个Redis在容器中运行。在容器内部,cgroup rss显示使用了大约1283MB的内存。

kmem内存使用量为30.75MB。

docker容器中所有进程的内存使用情况摘要为883MB。

我怎样才能算出";消失的记忆";(1296-883-30=383MB(;消失的记忆";会随着时间的推移而增长。容器很快就会被杀死。

environmentmet信息是

redis version:4.0.1
docker version:18.09.9
k8s version:1.13

**内存使用率为1283MB**

root@redis-m-s-rbac-0:/opt#cat /sys/fs/cgroup/memory/memory.usage_in_bytes 
1346289664  >>>> 1283.921875 MB

kmem内存使用率为30.75MB

root@redis-m-s-rbac-0:/opt#cat /sys/fs/cgroup/memory/memory.kmem.usage_in_bytes 
32194560  >>> 30.703125 MB
root@redis-m-s-rbac-0:/opt#cat /sys/fs/cgroup/memory/memory.stat 
cache 3358720
rss 1359073280 >>>  1296.11328125 MB
rss_huge 515899392
shmem 0
mapped_file 405504
dirty 0
writeback 0
swap 0
pgpgin 11355630
pgpgout 11148885
pgfault 25710366
pgmajfault 0
inactive_anon 0
active_anon 1359245312
inactive_file 2351104
active_file 1966080
unevictable 0
hierarchical_memory_limit 4294967296
hierarchical_memsw_limit 4294967296
total_cache 3358720
total_rss 1359073280
total_rss_huge 515899392
total_shmem 0
total_mapped_file 405504
total_dirty 0
total_writeback 0
total_swap 0
total_pgpgin 11355630
total_pgpgout 11148885
total_pgfault 25710366
total_pgmajfault 0
total_inactive_anon 0
total_active_anon 1359245312
total_inactive_file 2351104
total_active_file 1966080
total_unevictable 0

**docker容器中所有进程的内存使用情况摘要为883MB**

root@redis-m-s-rbac-0:/opt#ps aux | awk '{sum+=$6} END {print sum / 1024}'
883.609

之所以会发生这种情况,是因为usage_in_bytes没有显示内存和交换使用的确切值。memory.usage_in_bytes显示当前内存(RSS+Cache(的使用情况。

5.5 usage_in_bytes为了提高效率,与其他内核组件一样,内存cgroup使用一些优化来避免不必要的缓存线虚假分享。usage_in_bytes受该方法的影响显示内存(和交换(使用的"精确"值,它是高效访问。(当然,必要时会同步。(如果如果你想知道更准确的内存使用情况,你应该使用内存中的RSS+CACHE(+SWAP(值。stat(请参阅5.2(。

参考:https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt

最新更新