那些“cache”和“buffer”(二)

本文探讨了缓存在Web服务器及客户端浏览器中的重要性,包括减少服务器负载、提升响应速度等优势,并介绍了squid、varnish等典型缓存解决方案。此外还讨论了数据库系统中缓存的应用,如MySQL Query Cache和KV数据库等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面一篇文章谈了一些Linux系统层面的cache和buffer。这里主要谈谈应用层面的那些cache。相比系统层面的cache集中在IO上,应用层面的cache就显得五花八门了。就从WEB说起吧。

web缓存对于服务器和客户端都是不可或缺的。

对于web服务器来说,缓存是非常重要的东西,它可以大大的增加并发,缩短相应时间,减少服务器负荷。原理很简单。因为对于一个URL来说,很短时间内它的内容变化其实是不大的,如果每次请求都要服务器算一遍就显得太浪费了。所以web缓存就是放在web服务器前面的一个代理,它接收用户请求,并向后端请求,在返回响应的时候将这些响应缓存起来,遇到请求时不经过服务器计算直接返回响应,从大大提高响应速度,尤其是在请求量很大的时候。web缓存代表作是squid和varnish。

对于客户端的浏览器来说缓存同样不可或缺。甚至在HTTP协议中都为缓存提供了支持,HTTP返回码304 Not Modified就是告诉浏览器,你要的内容没变,用你缓存中的吧。在HTTP协议之外,浏览器自己也会做许多的缓存,对于图片啊,js什么的,短时间内的请求就自作主张直接不去远程取了,会大大减少请求量,从而节省大量的时间,用户需要速度。况且浏览器和服务器本是同根生嘛,不必相互煎熬。所以有时候你得强制刷新。

与web服务器紧密相关的就是数据库了。

在数据库系统中,缓存同样无处不在。因为同样的道理,对同一个sql查询来说,在某些条件下(比如它查的表自上次查询后都没更新过)它的结果就应该和上次查询一样的。于是mysql提供了query cache。也有些框架提供了缓存功能,比如hibernate。这都是读缓存,目的在于读很多,而写比较少的时候提高读的性能,如果写很多,而读比较少的话这类缓存就没什么用了。于是,在一些情况下我们希望可以为数据库引入写缓存。典型的是主键查询和更新。于是出现了kv数据库(比如memcached)。可以提供基于主键查询的读写缓存。这对于提高数据系统的整体性能是极其重要的。

其他五花八门的cache还有那些呢?

比如dns缓存,dns缓存同样存在于客户端和dns服务器中,与web缓存的原理是一样的。将dns的解析结果缓存起来。

比如arp缓存,将arp的结果缓存起来。

甚至,连编译系统也引入了缓存比如ccache,比如visual studio中的pch(预编译头)机制。

最后,我想说的是:cache is king! cache is everywhere!


原始出处


<think>好的,我需要解决用户的问题:如何在Linux中查看进程使用的cachebuffer。用户之前已经询问过如何查看进程内存使用情况,现在进一步想知道具体的cachebuffer部分。首先,回顾用户提供的引用内容。引用[1]提到清除pagecachebuffer的方法,引用[3][4]解释了PageCacheBufferCache的区别与融合,引用[5]指出高Cache可能由应用程序如Kafka引起。这些信息帮助理解cachebuffer的来源管理。用户的需求是查看特定进程的cachebuffer使用情况。常见的工具如top、ps可能无法直接显示这些信息。需要寻找能够深入分析进程内存的工具。根据知识库,smem工具可以显示USS、PSS、RSS,其中USS是进程独占的内存,可能包括部分cache。但具体cachebuffer的数据可能需要通过/proc文件系统获取。检查/proc/<PID>/smaps文件,里面会有每个内存区域的详细信息,包括是否有Shared_Clean、Shared_Dirty等,这可能关联到cache。另外,linux-process-cmdline工具可能帮助,但需要确认是否存在。引用中提到pagecachebuffercache在2.4内核后的融合,因此查看时需要区分文件缓存块缓存。可能需要结合vmtouch这样的工具来查看文件在cache中的情况,再关联到进程打开的文件。另外,用户可能需要系统级监控工具,如cachestat或pcstat,这些工具可以显示系统级别的cache使用情况,但进程级别的可能需要组合多个数据源。总结步骤:1.使用smem或/proc/<PID>/smaps分析进程的内存映射,查找与cache相关的部分。2.结合lsof查看进程打开的文件,再用vmtouch检查这些文件在cache中的情况。3.使用工具如pcstat来查看特定文件的缓存状态,从而关联到进程使用的cache。4.考虑系统级工具如cachestat,虽然不直接关联进程,但能提供整体情况。需要注意权限问题,部分工具可能需要sudo。另外,解释清楚cachebuffer在进程中的归属,因为多个进程可能共享同一cache,因此精确统计单个进程的cache使用较为复杂。最后,生成相关问题,帮助用户深入理解,如如何分析共享cache、清理特定进程cache的方法等。</think>### 如何在Linux中查看进程使用的CacheBuffer #### 一、基础概念解析 在Linux系统中,**Page Cache****Buffer Cache**是内核用于加速磁盘访问的缓存机制: - **Page Cache**:缓存文件内容(如应用程序读取的文件数据),通过`mmap`或`read`操作加载到内存[^3] - **Buffer Cache**:缓存块设备元数据(如文件系统目录结构、inode等),直接与磁盘块交互[^4] - 现代内核中两者已深度整合,统称为**Page Cache**[^3] #### 、进程级Cache/Buffer查看方法 ##### 1. 通过`smem`工具分析 安装后使用以下命令: ```bash smem -P <进程名> -c "name pss uss rss" ``` - **PSS**(Proportional Set Size):包含共享内存按比例分配后的内存量 - **USS**(Unique Set Size):进程独占的非共享内存(可能包含私有Cache)[^5] ##### 2. 解析`/proc/<PID>/smaps`文件 查看进程详细内存映射: ```bash grep -i '^shmem\|^private' /proc/<PID>/smaps ``` - `Shared_Clean`:共享且未被修改的Cache - `Private_Dirty`:进程独占的已修改Cache[^3] ##### 3. 使用`linux-ftools`工具包 通过`fincore`命令查看文件缓存情况: ```bash # 先获取进程打开的文件列表 lsof -p <PID> | grep REG | awk '{print $9}' # 再查看文件缓存状态 fincore <文件路径> ``` 输出示例: ``` RES PAGES SIZE FILE 16M 4096 4G /data/kafka.log ``` 表示该文件有16MB缓存在内存中[^5] #### 三、系统级Cache关联分析 ##### 1. 通过`vmtouch`工具 检测文件在内存中的缓存比例: ```bash vmtouch -v /proc/<PID>/fd/<文件描述符> ``` 输出示例: ``` Resident Pages: 250/1000 25% ``` 表示该文件有25%的内容缓存在内存中[^3] ##### 2. 使用`pcstat`工具 查看文件缓存统计: ```bash pcstat --pid <PID> ``` 输出示例: ``` Pid Size Cached Percent 1234 128M 32M 25% ``` #### 四、动态监控方法 ##### 1. 组合命令监控 ```bash watch -n1 "echo '=== Cache关联文件 ==='; lsof -p <PID> | grep REG; echo '=== 内存统计 ==='; grep -E 'Rss|Cache' /proc/<PID>/status" ``` ##### 2. 使用`cachestat`工具(需安装) 监控系统级Cache变化: ```bash cachestat -T 2 # 每2秒刷新 ``` 当目标进程读写文件时,观察`HITS``MISSES`变化[^2] #### 五、关键技术原理 1. **共享内存计算**:多个进程共享同一文件的Cache时,每个进程的`PSS`值会按比例分配共享内存[^3] 2. **脏页判定**:通过`/proc/meminfo`中的`Dirty`字段可查看待写回磁盘的Cache数据量 3. **缓存回收机制**:当内存不足时,内核优先回收`Clean`类型的Cache[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值