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释放哪些内存相关推荐

  1. 手工释放linux内存——/proc/sys/vm/drop_caches

    总有很多朋友对于Linux的内存管理有疑问,之前一篇[转]理解Linux的性能日志似乎也没能清除大家的疑虑.而在新版核心中,似乎对这个问题提供了新的解决方法,特转出来给大家参考一下.最后,还附上我对这 ...

  2. Centos清理内存 内存回收释放及内存使用查看的相关命令

    在清理前内存使用情况 free -m -m是单位,也可以-g 用以下命令清理内存 echo 1 > /proc/sys/vm/drop_caches 清理后内存使用情况再用以下命令看看. fre ...

  3. linux怎么释放cached中内存,Linux 释放cached内存

    使用free -m 查看系统使用的内存情况: # free -m total      used      free      shared      buffers -/+ buffers/cach ...

  4. 如何手动释放Linux内存的方法

    当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题 ...

  5. UNITY Destroy()和DestroyImadiate()都不会立即释放对象内存

    UNITY Destroy()和DestroyImadiate()都不会立即释放对象内存 如题,destroyimadiate是立即将物体从场景hierachy中移除,并标记为 "null& ...

  6. 当退出python时是否释放全部内存_Python面试题:高级特性考察

    1.函数装饰器有什么作用?请列举说明? 答: 装饰器就是一个函数,它可以在不需要做任何代码变动的前提下给一个函数增加额外功能,启动装饰的效果. 它经常用于有切面需求的场景,比如:插入日志.性能测试.事 ...

  7. 使用CRT调试内存分配堆来找出未释放的内存空间

    忘记释放已经分配的内存是一种常见的编程错误,当然我指的是在C++编程当中,例如下面的代码里面就存在一个忘记释放内存的编程错误.我个人觉得忘记释放内存的编程错误是不可避免的,毕竟程序员都是人,困了,心情 ...

  8. 当退出python时是否释放全部内存_python 关于高级特性的问题

    1.函数装饰器有什么作用?请列举说明? 2. Python 垃圾回收机制? 3. 魔法函数 _call_怎么使用? 4. 如何判断一个对象是函数还是方法? 5. @classmethod 和 @sta ...

  9. K3打印单据,提示:等待C盘释放空间,内存不足

    K3打印单据,提示:等待C盘释放空间,内存不足 今天采购部同事碰到一个问题, 在打结算单时,提示要等待C盘释放空间. 像这种错误, 大家都觉得自己C盘还有好大的空间,怎么会有如此错误. 其实电脑在交互 ...

  10. 内存释放_把微信这两个开关关掉, 手机立马释放大量内存, 快去试试吧

    阅读本文前,请您先点击上面的蓝色字体"生活妙招噻",再点击"关注",这样您就可以继续免费收到内容了.每天都有分享.完全是免费订阅,请放心关注 今天给大家的分享把 ...

最新文章

  1. windows10下,from skimage import morphology 报错的解决办法
  2. linux中lvs命令详解,LVS之三:ipvsadm常用管理命令介绍 | 旺旺知识库
  3. 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改
  4. 一文解决new/delete与malloc/free相关问题:区别?注意事项?使用方式?
  5. 单光子探测技术应用_我如何最终在光学/光子学应用程序中使用机器学习作为博士学位
  6. Codeforces Round #112 (Div. 2) E. Compatible Numbers sosdp
  7. java short后缀_自学java的新手问个问题,为什么写个代码中的int能自动转
  8. 【转】C# WebAPI中为自定义模型设置JSonConverter
  9. kindeditor 下图片链接取消边框
  10. Jmeter 常用断言使用
  11. windows server2012 domain user权限配置
  12. 御剑后台扫描工具下载
  13. linux运行check1n越狱,checkra1n越狱教程linux
  14. 特稿 | 纳德拉成长史 x 微软重生之路
  15. Python爬虫学习总结
  16. 手机相册中的照片如何导入备忘录?
  17. 纯css控制文字显示隐藏
  18. 计算机专业哪些证书可以抵个税,个税专项附加扣除中继续教育哪些证书可以扣除?...
  19. 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(一)开放源代码
  20. 北京大学软微学院计算机技术,北京大学软件与微电子学院计算机技术(专业学位)保研夏令营...

热门文章

  1. android 中文 拼音首字母,拼音首字母翻译成中文app
  2. 安全secuerity证券
  3. Thinkpad E430C关闭触摸板(Ubuntu)
  4. linux 新唐 STM32,新唐M0系列stm32单片机哪个便宜?
  5. IRQL(多线程中断请求级别)
  6. Google Java Style Guide
  7. HTML常用的元素介绍
  8. 一、Windows许可证即将过期怎么办
  9. python 空间法向量可视化_三维空间中平面的法向量计算
  10. BZOJ 1260涂色 paint