释放内存的三种方法 【推荐阅读】 Linux文件系统详解 linux进程管理—实时调度 linux内核内存管理-缺页异常 linux内核内存管理-brk系统调用 面试中发现大量的人对这块几乎是空白,谁都知道free -m 但是究竟什么意思,都说的不是很清楚了。 因为网上很多写的也不是很详细。或者本身就有误区我这块也是在不断调整阐述的内容和方式以及样式。出了多个版本,力求更好的进行解释呈现。 系统采样 查看机器内存占用情况
我们简单解释一下输出的信息:1、总的内存15G2、已经使用将近1个G3、buff数据即等待写入设备的数据+磁盘读取出来放在cache中提高访问速度的加起来是11G 这部分属于临时的,我们可以在内存遇到瓶颈的时候,想办法释放出来的。 buffer是用于存放要写入到磁盘或者其他块设备的数据,cache是存放从磁盘或其他文件系统上读出的数据。这二者是为了提高IO性能的,并由OS管理。 我们狭义的理解:在历史上,它们一个(buffer)被用来当成对io设备写的缓存,而另一个(cache)被用来当作对io设备的读缓存, 这里的io设备,主要指的是块设备文件和文件系统上的普通文件。我们如果深入了解过linux或读过操作系统原理就知道linux内存管理方式是.4、cache这里实际就是page cache(系统内核层面就叫page cache,这是linux内存页管理机制,page cache跟磁盘io密切相关) 它的具体大小,我们是可以通过/proc/meminfo来查看的,本身free命令也是读取的/proc/meminfo数据提取的.5、free列表示可用3.2G,因为buff+cache占用了11G6、swap空间 也交换空间,linux根据自己的算法把暂时不用的内存块数据,放到这里来. 如果你的内存存在问题,你也最好用slabtop也查看下内核占用内存情况,往往slab占用的缓存也不是不少的(slab+buddy是linux内存管理机制) 上面的输出中内存计算公式 MemTotal = MemFree +【Slab+ VmallocUsed + PageTables + KernelStack + HardwareCorrupted + Bounce + X】+【Active + Inactive + Unevictable + (HugePages_Total * Hugepagesize)】MemTotal = MemFree +【Slab+ VmallocUsed + PageTables + KernelStack + HardwareCorrupted + Bounce + X】+【Cached + AnonPages + Buffers + (HugePages_Total * Hugepagesize)】MemTotal = MemFree +【Slab+ VmallocUsed + PageTables + KernelStack + HardwareCorrupted + Bounce + X】+【ΣPss + (Cached – mapped) + Buffers + (HugePages_Total * Hugepagesize)】 为了提高磁盘存取效率, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。dentry解释:dentry是一个纯粹的内存结构,由文件系统在提供文件访问的过程中在内存中直接建立,dentry,即directory entry,目录项,就是多个文件或者目录的链接,通过这个链接可以找寻到目录之下的文件或者是目录项。dentry在文件系统里是极其重要的一个概念,dentry结构体在linux内核里也是用处广泛,这个结构体定义在include/linux/dcache.h里。 这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。 inode仅仅只是保存了文件对象的属性信息,包括:权限、属组、数据块的位置、时间戳等信息。但是并没有包含文件名,文件在文件系统的目录树中所处的位置信息。那么内核又是怎么管理文件系统的目录树呢?答案是目录项。目录项在内核中起到了连接不同的文件对象inode的作用,进而起到了维护文件系统目录树的作用。 内存信息文件位置在/proc/meminfo中,该文件记录内存的实时信息。/proc/meminfo是了解Linux系统内存使用状况的主要接口平常使用的“free”, “vmstat”等命令都是通过这个文件数据的。我们知道 /proc目录是linux中的虚拟文件目录,记录着内核中实时相关的数据以及进程的相关信息,通过这个目录下的文件修改,可以干预linux的行为所以另外章节说明一下/proc 这里面的内容.可参考内核官方解释: https://www.kernel.org/doc/Documentation/filesystems/proc.txt //这个可能需要你掌握比较多的系统原理性内容以及英语。我们查看/proc/meminfo 这个文件的内容同时做一些注解,但是要注意Linux 内核并没有统计到所有的内存分配,内核动态分配的内存中就有一部分没有计入/proc/meminfo中。 [root@fp-web-112 ~]# cat /proc/meminfo cpu二级缓存查找,下面输出结果,由于是多核,出现多个
释放内存方法有三种(系统默认值是0,释放之后你需要再改回0值) linux 内核官网: https://www.kernel.org https://www.kernel.org/doc/Documentation https://www.kernel.org/doc/Documentation/sysctl/vm.txt vm.txt有关/proc/sys/vm/drop_caches说明
linux内核参数vm.swappiness 设置linux内核参数vm.swappiness的值,以尽大限度的使用物理内存 Swappiness是Linux内核的一个属性,它定义系统多久使用交换空间一次。swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。linux的基本默认设置为60官网解释如下:https://www.kernel.org/doc/Documentation/sysctl/vm.txt
sysctl命令作用在运行时配置内核参数,命令是从目录中读取信息,是一个虚拟目录,其中包含可用于查看和设置当前内核参数的文件对象和将给出相同的输出 查看参数值[root@fp-web-112 ~]#cat /proc/sys/vm/swappiness临时调整[root@fp-web-112 ~]# sysctl vm.swappiness=10[root@fp-web-112 ~]# sysctl -q vm.swappiness 永久设置vm.swappiness [root@fp-web-112 ~]# echo “vm.swappiness = 10” >> /etc/sysctl.conf从配置文件“/etc/sysctl.conf”加载内核参数设置,立即生效[root@fp-web-112 ~]# sysctl -p 手动清理释放swap分区占用的内存 swapon -s 查看开启的swap分区
如果出现无法释放掉swap占用的内存的情况下 可以通过前置关闭该设备解决 [root@localhost felix]# swapoff /dev/dm-1 参考文档 原文作者:jinzi 原文地址:释放内存有三种方法(官方有解释) – jinzi – 博客园(版权归原文作者所有,侵权留言联系删除)【文章福利】小编推荐自己的Linux内核技术交流群:【】整理一些个人觉得比较好得学习书籍、视频资料!进群私聊管理领取内核资料包(含视频教程、电子书、实战项目及代码)
内核资料直通车:Linux内核源码技术学习路线+视频教程代码资料 学习直通车:Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/30341.html