drop_caches释放哪些内存
1、命令
echo 1 > /proc/sys/vm/drop_caches
释放文件的page cache内存,对应着top下的cached值
2、cached具体被哪些模块使用着(cat /proc/meminfo)
【Active(file) + Inactive(file) + Shmem + mlock_file】== 【Cached + Buffers】
Active(file)和Inactive(file)对应着文件映射
Shmem对应着内存文件系统,如/tmp;或者mmap的映射
addr = mmap(, , , MAP_ANONYMOUS|MAP_SHARED, , );
其中Shmem占着的空间是没有办法通过echo 1 > /proc/sys/vm/drop_caches释放的
3、Active(file)和Inactive(file)的空间具体被哪些文件使用着
这两块的空间可以通过echo 1 > /proc/sys/vm/drop_caches来回收释放,可以通过drop_caches的处理发现端倪。
3.1、查看内核代码/kernel/sysctl.c的vm_table结构体,发现
static struct ctl_table vm_table[] = {......{.procname = "drop_caches",.data = &sysctl_drop_caches,.maxlen = sizeof(int),.mode = 0644,.proc_handler = drop_caches_sysctl_handler,.extra1 = &one,.extra2 = &four,},......
};int drop_caches_sysctl_handler(struct ctl_table *table, int write,void __user *buffer, size_t *length, loff_t *ppos)
{int ret;......if (write) {static int stfu;if (sysctl_drop_caches & 1) {iterate_supers(drop_pagecache_sb, NULL);count_vm_event(DROP_PAGECACHE);}......}return 0;
}
//fs/super.c
//list_for_each_entry遍历所有的文件系统
void iterate_supers(void (*f)(struct super_block *, void *), void *arg)
{......list_for_each_entry(sb, &super_blocks, s_list) {......if (sb->s_root && (sb->s_flags & SB_BORN))f(sb, arg);......}
}
//fs/drop_caches.c
//list_for_each_entry遍历此文件系统下的所有文件inode
static void drop_pagecache_sb(struct super_block *sb, void *unused)
{......list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {......invalidate_mapping_pages(inode->i_mapping, 0, -1);......}
}
先遍历文件系统类型,然后遍历文件系统下所有的文件inode(在获取inode的情况下,参考通过inode获取文件名信息_sydyh43的博客-CSDN博客就可以获取文件名信息),再判断inode成员i_mapping指向的page的属性
int invalidate_inode_page(struct page *page)
{struct address_space *mapping = page_mapping(page);if (!mapping)return 0;if (PageDirty(page) || PageWriteback(page))return 0;if (page_mapped(page))return 0;return invalidate_complete_page(mapping, page);
}
从函数invalidate_inode_page中可以看出,当page是dirty, writeback等属性时,不做cache回收
drop_caches释放哪些内存相关推荐
- 手工释放linux内存——/proc/sys/vm/drop_caches
总有很多朋友对于Linux的内存管理有疑问,之前一篇[转]理解Linux的性能日志似乎也没能清除大家的疑虑.而在新版核心中,似乎对这个问题提供了新的解决方法,特转出来给大家参考一下.最后,还附上我对这 ...
- Centos清理内存 内存回收释放及内存使用查看的相关命令
在清理前内存使用情况 free -m -m是单位,也可以-g 用以下命令清理内存 echo 1 > /proc/sys/vm/drop_caches 清理后内存使用情况再用以下命令看看. fre ...
- linux怎么释放cached中内存,Linux 释放cached内存
使用free -m 查看系统使用的内存情况: # free -m total used free shared buffers -/+ buffers/cach ...
- 如何手动释放Linux内存的方法
当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题 ...
- UNITY Destroy()和DestroyImadiate()都不会立即释放对象内存
UNITY Destroy()和DestroyImadiate()都不会立即释放对象内存 如题,destroyimadiate是立即将物体从场景hierachy中移除,并标记为 "null& ...
- 当退出python时是否释放全部内存_Python面试题:高级特性考察
1.函数装饰器有什么作用?请列举说明? 答: 装饰器就是一个函数,它可以在不需要做任何代码变动的前提下给一个函数增加额外功能,启动装饰的效果. 它经常用于有切面需求的场景,比如:插入日志.性能测试.事 ...
- 使用CRT调试内存分配堆来找出未释放的内存空间
忘记释放已经分配的内存是一种常见的编程错误,当然我指的是在C++编程当中,例如下面的代码里面就存在一个忘记释放内存的编程错误.我个人觉得忘记释放内存的编程错误是不可避免的,毕竟程序员都是人,困了,心情 ...
- 当退出python时是否释放全部内存_python 关于高级特性的问题
1.函数装饰器有什么作用?请列举说明? 2. Python 垃圾回收机制? 3. 魔法函数 _call_怎么使用? 4. 如何判断一个对象是函数还是方法? 5. @classmethod 和 @sta ...
- K3打印单据,提示:等待C盘释放空间,内存不足
K3打印单据,提示:等待C盘释放空间,内存不足 今天采购部同事碰到一个问题, 在打结算单时,提示要等待C盘释放空间. 像这种错误, 大家都觉得自己C盘还有好大的空间,怎么会有如此错误. 其实电脑在交互 ...
- 内存释放_把微信这两个开关关掉, 手机立马释放大量内存, 快去试试吧
阅读本文前,请您先点击上面的蓝色字体"生活妙招噻",再点击"关注",这样您就可以继续免费收到内容了.每天都有分享.完全是免费订阅,请放心关注 今天给大家的分享把 ...
最新文章
- windows10下,from skimage import morphology 报错的解决办法
- linux中lvs命令详解,LVS之三:ipvsadm常用管理命令介绍 | 旺旺知识库
- 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改
- 一文解决new/delete与malloc/free相关问题:区别?注意事项?使用方式?
- 单光子探测技术应用_我如何最终在光学/光子学应用程序中使用机器学习作为博士学位
- Codeforces Round #112 (Div. 2) E. Compatible Numbers sosdp
- java short后缀_自学java的新手问个问题,为什么写个代码中的int能自动转
- 【转】C# WebAPI中为自定义模型设置JSonConverter
- kindeditor 下图片链接取消边框
- Jmeter 常用断言使用
- windows server2012 domain user权限配置
- 御剑后台扫描工具下载
- linux运行check1n越狱,checkra1n越狱教程linux
- 特稿 | 纳德拉成长史 x 微软重生之路
- Python爬虫学习总结
- 手机相册中的照片如何导入备忘录?
- 纯css控制文字显示隐藏
- 计算机专业哪些证书可以抵个税,个税专项附加扣除中继续教育哪些证书可以扣除?...
- 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(一)开放源代码
- 北京大学软微学院计算机技术,北京大学软件与微电子学院计算机技术(专业学位)保研夏令营...