一 、内存计算

在这里插入图片描述

total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
#所以空闲内存=free+buffers+cached=total-used

总共有40218M,用掉35446M。其中 buffer + cache= 34277M,由于这种类型的内存是可以回收的,虽然我们用掉了35446M,但是实际上我们实在需要的话,这部分的buffer/cache内存是可以释放出来的。
另外还有一部分内存,SLAB和pagetables,分别占用了630608 kB和69988 kB。

#查看内存使用情况
cat /proc/meninfo

在这里插入图片描述
SLAB是内核为了提高性能,把每个需要重复使用的对象都会分个slab池,这个slab池会cache大量常用的对象,所以会消耗大量的内存;通过slabtop命令,我们可以看到slab消耗在了哪些地方。

#查看动态内存占用
slabtop

在这里插入图片描述
PageTables则是系统内核加载和运行时分配的内存,也就是系统所占用的内存。
综上,内存的消耗主要就在四个方面:
进程消耗、Cache消耗、SLAB消耗、Pagetables消耗
Pagetables和应用进程消耗一般不会太大,无需也没办法进行清理;cache和SLAB如果消耗过多,甚至应用关闭后还是没有办法释放,可以尝试手动的方式将进行内存清理(最好在应用关闭后再做清理操作)。

附:其他查询方案

#内存占用高的前20
ps aux |head -1;ps aux |grep -v PID |sort -rn -k +4|head -20
#查看硬件内存条数量
dmidecode |grep -

二 、内存清理

常用清理步骤

#手动清理内存前,先执行sync命令,将内存中的脏页,写进磁盘,以免数据丢失。
sync

echo 1 > /proc/sys/vm/drop_caches

#清除后要还原系统默认配置:
echo 0 > /proc/sys/vm/drop_caches

#查看设置
 sysctl -a | grep drop_caches

清理cache、dentries和inodes
echo 3 >/proc/sys/vm/drop_caches
只清理dentries和inodes
echo 2 >/proc/sys/vm/drop_caches
只清理cache
echo 1 >/proc/sys/vm/drop_caches

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐