我是靠谱客的博主 眯眯眼冥王星,最近开发中收集的这篇文章主要介绍【小工具】 - linux内存碎片检查和清理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

服务环境

CentOS Linux release 7.9.2009 (Core)
kernel: Linux xxxx 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

内存碎片检查方法

  检测linux碎片,这里介绍buddyinfo工具,来进行内存碎片分析。
  buddyinfo是linuxbuddy系统管理物理内存的debug信息。在linux中使用buddy算法解决物理内存的外碎片问题,其把所有空闲的内存,以2的幂次方的形式,分成11个块链表,分别对应为1、2、4、8、16、32、64、128、256、512、1024个页块。而Linux支持NUMA技术,对于NUMA设备,NUMA系统的结点通常是由一组CPU和本地内存组成,每一个节点都有相应的本地内存,因此buddyinfo 中的Node0表示节点ID;而每一个节点下的内存设备,又可以划分为多个内存区域(zone),因此下面的显示中,对于Node0的内存,又划分类DMA、Normal区域。
而buddyinfo,又可以使用extfrag_index和unusable_index工具进行细致分析。

使用extfrag_index分析内存碎片

  extfrag_index文件中显示的数值是除以1000后的结果,当数值越接近1则表示碎片越多,数值越接近-1则表示碎片越少;
  第1列>第11列分别标识2^0 * page_size > 2^10 * page_size的可用数量;从左到右看,最右边数字越大,说明内存空间越连续;

# 查看内存页
cat /sys/kernel/debug/extfrag/extfrag_index

显示结果为

Node 0, zone      DMA -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
Node 0, zone    DMA32 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 0.996
Node 0, zone   Normal -1.000 -1.000 0.748 0.874 0.937 0.969 0.985 0.993 0.996 0.998 0.999
Node 1, zone   Normal -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 0.983 0.992 0.996 0.998

上述结果中,以Node 0, zone Normal为例,从第三列开始内存被大量使用,意味着大部分4个pagesize的空间开始出现了不连续,存在较多内存碎片。

使用unusable_index分析内存碎片

/sys/kernel/debug/extfrag/unusable_index的思路和extfrag_index基本一样,只是unusable_index是从内存快的视角分析。这里不进行赘述,如果有需要了解的,请在留言区给我留言,进行补充。

内存碎片清理方法

使用

# 被动清理内存
echo 1 >/proc/sys/vm/compact_memory

!!!此操作只有在内核配置CONFIG_COMPACTION=y时有效,具体操作间补充内容

使用drop_caches清理内存(生产慎用)

# 同步内存内容到磁盘(内存和swap使用空间越大,执行时间越长,可忽略)
sync
# 清空所有cache/buffer/memory 1-清空内存页,2-清空slabe,3-清空1+2
echo 3 > /proc/sys/vm/drop_caches

补充内容

  除了可以通过上述的方式查看内存碎片外,也可以直接使用cat /proc/buddyinfo进行查看。
extfrag_index这个要展示出来,需要内核编译了两个选项分别是CONFIG_DEBUG_FS和CONFIG_COMPACTION
内核配置文件位于/boot/config-{内核版本},内核版本通过uname -a查看,完整路径为

/boot/config-`uname -a | awk -F ' ' '{print $3}'`

修改对应的值后,重启服务器后生效。

最后

以上就是眯眯眼冥王星为你收集整理的【小工具】 - linux内存碎片检查和清理的全部内容,希望文章能够帮你解决【小工具】 - linux内存碎片检查和清理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部