Linux内存占用过高?非也

Linux内存占用过高?非也,第1张

先来在阿里的ECS上top一下感受内存爆满的感觉,终端输入 top

结合 *** 作系统,计组等课程,以及多年以来windows培养给我的直觉,认为0.96G(1016272K)的总内存,使用了0.84G(880960K)的内存,使用率高达88%。然而我还啥都没干,怎么会这样呢?

仔细查看还会发现后面有一个buffers,Swap后面还有一个Cached Mem。

现在我们用free来观察下

虽然Mem显示了0.9G左右的used,但是-/+buffers/cache(减去buffers和cache的结果)可以看到,当前进程实际占用内存是0.24G(256348K),而可用空闲(free)内存为0.72G(759924K)。

可以这么理解:在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。

如上面的例子:共1G的内存,0.9G被占用,但是buffer和cached

mem部分作为缓存,可以使用命中率的方式提高使用效率,而且这部分缓存是根据指令随时可以释放的,我们可以认为这部分内存没有实际被使用,也可以认为它是空闲的。

因此查看目前进程正在实际被使用的内存,是used-(buffers+cache),也可以认为如果swap没有大量使用,mem还是够用的,只有mem被当前进程实际占用完(没有了buffers和cache),才会使用到swap的。

再举个栗子: 这个是我在RPi一群看到的一个群友发的探针监测截图

观察内存使用状况一栏,发现物理内存功925.89M,已用911.74M,Cache化的内存是676.46M,Buffers为61.3M,现在用上述公式:

带入:

查看系统内存的使用状态

监控报警可用内存空间不足,常规的解决方案如下:

本文将介绍定期清除页面缓存,但是过会儿内存又被占满问题的分析。

查看更详细的内存信息:

$ cat /proc/meminfo |grep -E "Buffer|Cache|Swap|Mem|Shmem|Slab|SReclaimable|SUnreclaim"

清除缓存策略:

1:清除page cache

2:清除slab分配器中的对象(包括目录项和inode)

3:清除page cache和slab分配器中的对象

OOM killer及Overcommit

Linux buffer/cache 内存占用过高的原因以及解决办法

Linux查看Buffer&Cache被哪些进程占用


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7590248.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存