文件页和匿名页

 

文件页

内存回收,也就是系统释放掉可以回收的内存,比如缓存和缓冲区,就属于可回收内存。它们在内存管理中,通常被叫做文件页(File-backed Page)。大部分文件页,都可以直接回收,以后有需要时,再从磁盘重新读取就可以了。

 

脏页

那些被应用程序修改过,并且暂时还没写入磁盘的数据(也就是脏页),就得先写入磁盘,然后才能进行内存释放。

这些脏页,一般可以通过两种方式写入磁盘。可以在应用程序中,通过系统调用 fsync ,把脏页同步到磁盘中;也可以交给系统,由内核线程 pdflush 负责这些脏页的刷新。

 

文件映射页

除了缓存和缓冲区,通过内存映射获取的文件映射页,也是一种常见的文件页。它也可以被释放掉,下次再访问的时候,从文件重新读取。

 

匿名页

应用程序动态分配的堆内存,也就是在内存管理中说到的匿名页(Anonymous Page),它们很可能还要再次被访问啊,不能直接回收,这些内存自然不能直接释放。但是,如果这些内存在分配后很少被访问,似乎也是一种资源浪费。

 

Linux Swap

Linux的 Swap 机制把这些不常访问的内存先写到磁盘中,然后释放这些内存,给其他更需要的进程使用。再次访问这些内存时,重新从磁盘读入内存就可以了。

### 匿名文件的比例关系及优化策略 #### 比例关系 匿名(Anonymous Pages)文件(File-backed Pages)是Linux内存管理系统中的两种主要面类型。匿名是没有关联到磁盘文件的内存,通常用于存储进程运行时产生的动态数据,例如堆、栈、共享内存等[^4]。而文件则是指那些由磁盘上的文件支持的内存。 在实际应用中,匿名文件的比例取决于系统的具体工作负载。对于以I/O密集型操作为主的系统,文件可能会占据较大比例;而对于计算密集型或涉及大量动态内存分配的应用程序,则匿名会更多。然而,这种比例并不是固定的,而是随着应用程序的行为系统配置的变化而变化。 #### 优化策略 为了提高系统的整体性能并合理利用有限的物理内存资源,可以从以下几个方面考虑对匿名文件进行优化: 1. **减少不必要的匿名占用** - 尽量避免过度使用`malloc`或其他动态内存分配函数创建过大的堆空间。可以通过预估所需的最大内存大小来控制堆的增长速度。 - 对于多线程环境下的栈消耗问题,可以根据实际情况调整每个线程默认栈大小参数(如通过设置`pthread_attr_setstacksize()`),从而降低因过多线程而导致的大规模栈分配带来的压力[^4]。 2. **有效管理文件缓存** - 利用操作系统提供的工具命令如`sync`或者手动调用`fsync()`接口定期将脏缓冲区写回到硬盘上,防止因为未及时刷新造成过多干净文件驻留在RAM里影响其他重要用途的空间调配。 - 如果某些特定时间段内不需要频繁读取某些大文件的内容,在完成相应任务之后主动释放这些文件对应的page cache,比如借助`/proc/sys/vm/drop_caches`机制清除掉不再需要的部分。 3. **采用合适的交换策略** 当面临内存不足情况时,合理的swap分区规划能够帮助缓解短期高峰期内存紧张局面。但是需要注意的是,默认情况下Linux倾向于尽可能多地保留clean file pages而不是anon pages进入swap area,因此如果发现存在较多闲置却难以驱逐出去的file backed data,则可能需要重新审视当前swappiness值设定是否恰当,并适当修改该数值以便更好地平衡两者之间的淘汰顺序[^4]。 4. **充分利用现代硬件特性** 新一代服务器往往配备更大容量更快访问速率的DRAM芯片组以及SSD固态驱动器作为辅助存储设备。在这种环境下,可以探索更激进一些的技术手段来进行进一步精细化调控,例如启用Transparent HugePages功能自动合并邻近的小尺寸pages成更大的contiguous blocks以改善TLB命中率表现;又或者是结合NUMA架构特点针对性部署workload使得本地node内的memory access延迟最小化等等措施均有助于达成最终目标——即让整个计算机体系结构内部各组成部分之间相互配合得当发挥最大效能的同时又能维持良好的用户体验水平。 ```bash # 查看当前 swappiness 值 cat /proc/sys/vm/swappiness # 设置新的 swappiness 值 (临时生效) sysctl vm.swappiness=10 # 修改配置文件使更改永久保存 echo "vm.swappiness=10" >> /etc/sysctl.conf ``` 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值