首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
开篇词 | 如何让Linux内核更好地服务应用程序?
01 基础篇 | 如何用数据观测Page Cache?
02 基础篇 | Page Cache是怎样产生和释放的?
03 案例篇 | 如何处理Page Cache难以回收产生的load飙高问题?
04 案例篇 | 如何处理Page Cache容易回收引起的业务性能问题?
05 分析篇 | 如何判断问题是否由Page Cache产生的?
06 基础篇 | 进程的哪些内存类型容易引起内存泄漏?
07 案例篇 | 如何预防内存泄漏导致的系统假死?
08 案例篇 | Shmem:进程没有消耗内存,内存哪去了?
09 分析篇 | 如何对内核内存泄漏做些基础的分析?
10 分析篇 | 内存泄漏时,我们该如何一步步找到根因?
11 基础篇 | TCP连接的建立和断开受哪些系统配置影响?
12 基础篇 | TCP收发包过程会受哪些配置项影响?
13 案例篇 | TCP拥塞控制是如何导致业务性能抖动的?
14 案例篇 | TCP端到端时延变大,怎样判断是哪里出现了问题?
15 分析篇 | 如何高效地分析TCP重传问题?
16 套路篇 | 如何分析常见的TCP问题?
17 基础篇 | CPU是如何执行任务的?
18 案例篇 | 业务是否需要使用透明大页:水可载舟,亦可覆舟?
19 案例篇 | 网络吞吐高的业务是否需要开启网卡特性呢?
20 分析篇 | 如何分析CPU利用率飙高问题 ?
21 | 我是如何使用tracepoint来分析内核Bug的?
当前位置:
首页>>
技术小册>>
Linux内核技术实战
小册名称:Linux内核技术实战
### 01 基础篇 | 如何用数据观测Page Cache? 在Linux系统中,Page Cache(页面缓存)是一个至关重要的机制,它极大地提升了文件系统的访问效率,减少了磁盘I/O操作。Page Cache作为内核缓存系统的一部分,存储了最近被访问过的文件数据和元数据,以便后续访问时能直接从内存中获取,而非再次访问较慢的磁盘。本章节将深入探讨如何通过各种工具和命令来观测和分析Linux系统中的Page Cache使用情况,帮助读者更好地理解其工作机制及优化策略。 #### 一、Page Cache概述 Page Cache是Linux内核中用于缓存文件内容的一种机制,它利用了虚拟内存管理系统的页面(Page)框架。每个Page大小为4KB(或根据系统配置不同而有所变化),这些页面可以被映射到文件系统中的文件上,也可以作为进程地址空间的一部分。当文件数据被读取时,如果Page Cache中没有相应的数据,则会发生磁盘I/O,数据被读入缓存;若数据已存在于缓存中,则直接从缓存中读取,从而避免了昂贵的磁盘访问。 #### 二、观测Page Cache的工具与方法 ##### 1. /proc/meminfo `/proc/meminfo`文件是Linux系统中查看内存使用情况的一个关键接口,其中包含了关于Page Cache的详细信息。通过查看该文件,可以获取到如`Cached`、`Buffers`和`Dirty`等关键指标。 - **Cached**:表示被Page Cache占用的内存量,这部分内存主要用于缓存文件内容。 - **Buffers**:通常指用于缓存块设备(如硬盘)I/O的缓冲区,但在现代Linux系统中,Buffers和Cached的概念逐渐模糊,很多情况下Buffers也被计入Cached中。 - **Dirty**:表示已经修改但尚未写回磁盘的Page Cache页数,反映了系统的写操作效率。 示例命令: ```bash cat /proc/meminfo | grep -E 'Cached|Buffers|Dirty' ``` ##### 2. vmstat `vmstat`命令提供了关于系统内存、进程、中断、CPU活动等的统计信息,是诊断系统性能问题的重要工具之一。通过`vmstat`的输出,可以间接观察到Page Cache的活动情况,如缓存命中率等信息。 ```bash vmstat 1 ``` 注意:`vmstat`的直接输出中并不直接显示Page Cache的详细数据,但通过分析其他指标(如bi/bo,即每秒从块设备读取和写入的块数),可以推断Page Cache的使用情况。 ##### 3. iostat `iostat`主要用于监视系统输入输出设备和CPU的使用情况。通过`iostat`,可以观察到磁盘的读写速率,以及系统如何利用Page Cache来减少对磁盘的直接访问。 ```bash iostat -dx 1 ``` 此命令以1秒为间隔显示所有块设备的扩展统计信息,包括每秒的读写请求数、读写数据量等,有助于评估Page Cache的效率和磁盘性能。 ##### 4. free命令 `free`命令显示了系统的总内存、已用内存、空闲内存等信息,虽然它不直接展示Page Cache的具体大小,但通过`-m`(以MB为单位)或`-g`(以GB为单位)选项查看时,可以看到包括buffers/cache在内的内存使用情况,从而间接评估Page Cache的占用情况。 ```bash free -m ``` ##### 5. sar工具 `sar`(System Activity Reporter)是sysstat包中的一个工具,用于收集、报告或保存系统活动信息。通过`sar`,可以获取历史时间段内的内存使用情况,包括Page Cache的变动情况。 ```bash sar -r 1 5 ``` 上述命令以1秒为间隔,共收集5次内存使用情况的报告,包括kbmemfree(空闲内存量,不包括buffers/cache)、kbmemused(已用内存量,包括buffers/cache)等。 #### 三、深入分析与优化 在观测到Page Cache的使用情况后,如何根据这些信息来优化系统性能是一个值得探讨的问题。以下是一些常见的优化策略: 1. **增加系统内存**:最直接的方式是增加物理内存,这样可以扩大Page Cache的容量,减少磁盘I/O。 2. **调整swappiness参数**:swappiness是一个内核参数,用于控制内核在内存不足时交换出内存页面的积极程度。降低swappiness值可以减少将内存页面交换到磁盘上的频率,从而保留更多内存给Page Cache使用。 3. **优化文件系统参数**:某些文件系统(如ext4)提供了调整缓存行为的参数,如`noatime`(不更新文件访问时间),可以减少不必要的写操作,从而保持Page Cache的清洁和高效。 4. **应用程序层面的优化**:合理的文件读写策略,如使用合适的缓冲区大小、减少不必要的文件访问等,也能有效提高Page Cache的利用率。 5. **监控与预警**:建立监控体系,实时监控Page Cache及其他关键指标的变化情况,及时发现并解决潜在的性能瓶颈。 #### 四、结论 Page Cache是Linux内核中一个极其重要的组成部分,它通过对文件数据的缓存,极大地提高了系统的文件访问性能。通过`/proc/meminfo`、`vmstat`、`iostat`、`free`和`sar`等工具和命令,我们可以有效地观测和分析Page Cache的使用情况,进而采取相应的优化措施,提升系统的整体性能。在实际操作中,应结合系统的具体情况和业务需求,灵活运用各种工具和策略,以达到最佳的优化效果。
上一篇:
开篇词 | 如何让Linux内核更好地服务应用程序?
下一篇:
02 基础篇 | Page Cache是怎样产生和释放的?
该分类下的相关小册推荐:
Web服务器Tomcat详解
Linux常用服务器部署实战
Ansible自动化运维平台
Linux云计算网站集群之nginx核心
高并发系统设计核心
Linux云计算网站集群架构之存储篇
部署kubernetes集群实战
etcd基础入门与实战
深入浅出分布式技术原理
云计算那些事儿:从IaaS到PaaS进阶(一)
CI和CD代码管理平台实战
Redis入门到实战