当前位置:首页 > 内存 > 正文

linux清理内存

  • 内存
  • 2024-05-22 09:43:27
  • 5973

一、Linux进程内存管理?对于包含MMU的处理器,Linux系统提供了复杂的存储管理系统,允许进程访问高达4GB的内存。在Linux系统中,进程的4GB内存空间被分为两部分——用户空间和内核空间。用户空间地址通常分配在0-3GB之间(即PAGE_OFFSET,在Ox86中等于OxC0000000。这样,剩余的3~4GB空间是内核空间,无法访问内核空间。用户进程只能访问内核空间通过系统调用(代表用户进程运行在内核态),彼此独立且互不相关。每个用户进程都有不同的页表。它不随进程而改变。虚拟地址到物理地址的映射。内核的空间被所有进程共享。内核的虚拟空间独立于其他程序。
Linux中的1GB内核地址空间分为物理内存映射区、虚拟内存分配区、页内存区。顶部的层级映射区域、专用站点地图区域和保留的系统地图区域。
对于x86系统,一般情况下,物理内存映射区域的最大长度为896MB,系统的物理内存依次映射到内核空间的这个区域。当系统物理内存大于896MB时,超出物理内存映射区域的部分内称为高级内存(而未超出物理内存映射区域的内存通常称为常规内存)。当访问顶级页面映射区域中的顶级内存时,它必须映射它们。Linux在内核空间顶部保留了FIXADDR_TOP~4GB区域作为保留区域。
当系统物理内存超过4GB时,必须使用CPU的页扩展(PAE)模式提供的64位页目录项来访问4GB以上的物理内存,这需要CPU的支持。添加了PAE功能的IntelPentiumPro及更高版本的CPU允许配置最大64GB的内存,并具有36位物理地址空间寻址能力。
可以看出,对于32位x86来说,在3~4GB之间的内核空间中,从低地址到高地址的顺序是:物理内存映射区→隔离区→内存分配器区虚拟内存vmalloc→隔离区→高级内存映射区→特殊页映射区→保留区。
二、如何为linux释放内存和缓存在Linux系统中,我们通常不需要释放内存,因为系统已经对内存管理得很好了。但凡事都有例外。有时内存会被缓存占用,导致系统使用SWAP空间,影响性能。此时,需要执行释放内存(清除缓存)的操作。
Linux系统的缓存机制相当先进,它针对的是dentry(用于VFS,加速文件路径名到inode的转换)、BufferCache(用于读写磁盘块)和PageCache(用于读写文件)。inodes)write)来执行缓冲区操作。然而,在执行大量文件操作后,缓存实际上会耗尽其所有内存资源。但实际上,我们的文件操作完成了,这个缓存就不再使用了。此时,我们可以看看缓存占用了多少内存吗?
所以我们在Linux中还是需要手动释放内存,本质上是一个缓冲区释放操作。
要达到释放缓存的目的,我们首先要了解主配置文件/proc/sys/vm/drop_caches。该文件记录了缓冲区释放参数。默认值为0,表示不释放缓冲区。它的值可以是0到3之间的任意数字,代表不同的含义:
0–不释放
1–释放页面缓存
2–释放cogs和inode
3–释放所有缓存
知道参数后,我们就可以根据自己的需要使用下面的指令进行操作了。
首先,我们需要使用sync命令将所有未写入的系统缓存写入磁盘,包括修改的i节点、延迟的I/O块和文件写映射。否则,未保存的文件可能会在缓冲区释放过程中丢失。
#sync
接下来,我们需要将所需的参数写入文件/proc/sys/vm/drop_caches。例如,如果我们需要释放所有缓冲区。输入以下命令:
#echo3>/proc/sys/vm/drop_caches
该命令输入后立即生效。您可以检查内存是否空闲。明显增加。
要查询当前缓存释放的参数,可以输入以下命令:
#cat/proc/sys/vm/drop_caches
#free-m
要删除交换区,只需先关闭交换区,使用:
#swapoff-a
然后激活交换区,因为它只是删除,并不意味着不删除使用swap:
#swapon-a