在这个简短的博文中,我们将查看如何使用gydF4y2Balinux-fincoregydF4y2Ba检查哪些文件在内存中的Linux页面缓存。有一个介绍性的读到Linux页面缓存检查gydF4y2Ba在这里gydF4y2Ba和gydF4y2Ba在这里gydF4y2Ba。gydF4y2Ba
总之,当你从磁盘读取或写入一个文件(除非你指定使用Direct_IO绕过功能),结果是缓存在内存中,以便后续请求服务,而不是订单magnitude-slower磁盘子系统(它也可以用来缓存写道,之前刷新到磁盘)。这样做是只要有记忆,不被任何过程;每当有短缺,否则空闲内存,内核将选择第一个驱逐页面缓存。gydF4y2Ba
这个过程对用户是透明的居民和一般我们不应该介意的东西。然而,如果我们想要更多的信息吗?是可能的吗?我们能怎么做?让我们来看看!gydF4y2Ba
安装它gydF4y2Ba
除非是CentOS 6,似乎没有包可用,所以我们需要下载和编译的源代码。这是非常简单的步骤:gydF4y2Ba
|
1gydF4y2Ba
2gydF4y2Ba
3gydF4y2Ba
4gydF4y2Ba
5gydF4y2Ba
|
gitgydF4y2Ba
克隆gydF4y2Ba
httpsgydF4y2Ba
:gydF4y2Ba
/gydF4y2Ba
/gydF4y2Ba
githubgydF4y2Ba
comgydF4y2Ba
/gydF4y2Ba
yazgoogydF4y2Ba
/gydF4y2Ba
linuxgydF4y2Ba
- - - - - -gydF4y2Ba
ftoolsgydF4y2Ba
.gydF4y2Ba
cdgydF4y2Ba
linuxgydF4y2Ba
- - - - - -gydF4y2Ba
ftoolsgydF4y2Ba
/gydF4y2Ba
。gydF4y2Ba
/gydF4y2Ba
配置gydF4y2Ba
使gydF4y2Ba
sudogydF4y2Ba
使gydF4y2Ba
安装gydF4y2Ba
|
在这之后,我们将用于二进制文件准备好gydF4y2Ba/usr/local/bin/gydF4y2Ba。gydF4y2Ba
|
1gydF4y2Ba
2gydF4y2Ba
3gydF4y2Ba
4gydF4y2Ba
5gydF4y2Ba
6gydF4y2Ba
7gydF4y2Ba
8gydF4y2Ba
9gydF4y2Ba
10gydF4y2Ba
11gydF4y2Ba
12gydF4y2Ba
13gydF4y2Ba
|
壳牌gydF4y2Ba
>gydF4y2Ba
linuxgydF4y2Ba
- - - - - -gydF4y2Ba
fincoregydF4y2Ba
- - -gydF4y2Ba
帮助gydF4y2Ba
fincoregydF4y2Ba
版本gydF4y2Ba
1.3.0gydF4y2Ba
fincoregydF4y2Ba
(gydF4y2Ba
选项gydF4y2Ba
]gydF4y2Ba
文件gydF4y2Ba
。gydF4y2Ba
。gydF4y2Ba
。gydF4y2Ba
- - - - - -gydF4y2Ba
年代gydF4y2Ba
- - -gydF4y2Ba
总结gydF4y2Ba
当gydF4y2Ba
比较gydF4y2Ba
多个gydF4y2Ba
文件gydF4y2Ba
,gydF4y2Ba
打印gydF4y2Ba
一个gydF4y2Ba
总结gydF4y2Ba
报告gydF4y2Ba
- - - - - -gydF4y2Ba
pgydF4y2Ba
- - -gydF4y2Ba
页面gydF4y2Ba
打印gydF4y2Ba
页面gydF4y2Ba
那gydF4y2Ba
是gydF4y2Ba
缓存gydF4y2Ba
- - - - - -gydF4y2Ba
ogydF4y2Ba
- - -gydF4y2Ba
只有gydF4y2Ba
- - - - - -gydF4y2Ba
缓存gydF4y2Ba
只有gydF4y2Ba
打印gydF4y2Ba
统计数据gydF4y2Ba
为gydF4y2Ba
文件gydF4y2Ba
那gydF4y2Ba
是gydF4y2Ba
实际上gydF4y2Ba
在gydF4y2Ba
缓存gydF4y2Ba
。gydF4y2Ba
- - - - - -gydF4y2Ba
ggydF4y2Ba
- - -gydF4y2Ba
图gydF4y2Ba
打印gydF4y2Ba
一个gydF4y2Ba
视觉gydF4y2Ba
图gydF4y2Ba
的gydF4y2Ba
每一个gydF4y2Ba
文件gydF4y2Ba”gydF4y2Ba年代gydF4y2Ba
缓存gydF4y2Ba
页面gydF4y2Ba
分布gydF4y2Ba
。gydF4y2Ba
- - - - - -gydF4y2Ba
年代gydF4y2Ba
- - -gydF4y2Ba
最小值gydF4y2Ba
- - - - - -gydF4y2Ba
大小gydF4y2Ba
需要gydF4y2Ba
那gydF4y2Ba
每一个gydF4y2Ba
文件gydF4y2Ba
大小gydF4y2Ba
是gydF4y2Ba
更大的gydF4y2Ba
比gydF4y2Ba
NgydF4y2Ba
字节gydF4y2Ba
。gydF4y2Ba
- - - - - -gydF4y2Ba
CgydF4y2Ba
- - -gydF4y2Ba
最小值gydF4y2Ba
- - - - - -gydF4y2Ba
缓存gydF4y2Ba
- - - - - -gydF4y2Ba
大小gydF4y2Ba
需要gydF4y2Ba
那gydF4y2Ba
每一个gydF4y2Ba
文件gydF4y2Ba
缓存gydF4y2Ba
大小gydF4y2Ba
是gydF4y2Ba
更大的gydF4y2Ba
比gydF4y2Ba
NgydF4y2Ba
字节gydF4y2Ba
。gydF4y2Ba
- - - - - -gydF4y2Ba
PgydF4y2Ba
- - -gydF4y2Ba
最小值gydF4y2Ba
- - - - - -gydF4y2Ba
全氯乙烯gydF4y2Ba
- - - - - -gydF4y2Ba
缓存gydF4y2Ba
需要gydF4y2Ba
百分比gydF4y2Ba
的gydF4y2Ba
一个gydF4y2Ba
文件gydF4y2Ba
那gydF4y2Ba
必须gydF4y2Ba
是gydF4y2Ba
缓存gydF4y2Ba
。gydF4y2Ba
- - - - - -gydF4y2Ba
hgydF4y2Ba
- - -gydF4y2Ba
帮助gydF4y2Ba
打印gydF4y2Ba
这gydF4y2Ba
消息gydF4y2Ba
。gydF4y2Ba
- - - - - -gydF4y2Ba
lgydF4y2Ba
- - -gydF4y2Ba
垂直gydF4y2Ba
打印gydF4y2Ba
的gydF4y2Ba
输出gydF4y2Ba
的gydF4y2Ba
这gydF4y2Ba
脚本gydF4y2Ba
垂直gydF4y2Ba
。gydF4y2Ba
|
使用它gydF4y2Ba
见前面的输出,我们需要通过一个文件或一组文件。这是奇怪的乍一看,乞求一个问题:“如果我不确实提供了一些文件在页面缓存吗?“答案很简单——他们不会上市,即使他们是在缓存!让我们看看它的实际效果。首先,让我们写两个文件,检查是否在缓存中(和它们占用多少空间)。gydF4y2Ba
|
1gydF4y2Ba
2gydF4y2Ba
3gydF4y2Ba
4gydF4y2Ba
5gydF4y2Ba
6gydF4y2Ba
7gydF4y2Ba
8gydF4y2Ba
9gydF4y2Ba
10gydF4y2Ba
11gydF4y2Ba
12gydF4y2Ba
13gydF4y2Ba
14gydF4y2Ba
15gydF4y2Ba
16gydF4y2Ba
17gydF4y2Ba
18gydF4y2Ba
19gydF4y2Ba
20.gydF4y2Ba
|
壳牌gydF4y2Ba
>gydF4y2Ba
回声gydF4y2Ba
aoeugydF4y2Ba
>gydF4y2Ba
test_file_1gydF4y2Ba
壳牌gydF4y2Ba
>gydF4y2Ba
回声gydF4y2Ba
htnsgydF4y2Ba
>gydF4y2Ba
test_file_2gydF4y2Ba
壳牌gydF4y2Ba
>gydF4y2Ba
linuxgydF4y2Ba
- - - - - -gydF4y2Ba
fincoregydF4y2Ba
- - - - - -gydF4y2Ba
lgydF4y2Ba
test_file_1gydF4y2Ba
test_filegydF4y2Ba
_gydF4y2Ba2gydF4y2Ba
(gydF4y2Ba
。gydF4y2Ba
。gydF4y2Ba
.trimmedgydF4y2Ba
为gydF4y2Ba
简洁gydF4y2Ba
。gydF4y2Ba
。gydF4y2Ba
。gydF4y2Ba
]gydF4y2Ba
test_file_1gydF4y2Ba
大小gydF4y2Ba
:gydF4y2Ba
5gydF4y2Ba
total_pagesgydF4y2Ba
:gydF4y2Ba
1gydF4y2Ba
min_cached_pagegydF4y2Ba
:gydF4y2Ba
0gydF4y2Ba
缓存gydF4y2Ba
:gydF4y2Ba
1gydF4y2Ba
cached_sizegydF4y2Ba
:gydF4y2Ba
4gydF4y2Ba
,gydF4y2Ba
096年gydF4y2Ba
cached_percgydF4y2Ba
:gydF4y2Ba
100.00gydF4y2Ba
test_file_2gydF4y2Ba
大小gydF4y2Ba
:gydF4y2Ba
5gydF4y2Ba
total_pagesgydF4y2Ba
:gydF4y2Ba
1gydF4y2Ba
min_cached_pagegydF4y2Ba
:gydF4y2Ba
0gydF4y2Ba
缓存gydF4y2Ba
:gydF4y2Ba
1gydF4y2Ba
cached_sizegydF4y2Ba
:gydF4y2Ba
4gydF4y2Ba
,gydF4y2Ba
096年gydF4y2Ba
cached_percgydF4y2Ba
:gydF4y2Ba
100.00gydF4y2Ba
- - -gydF4y2Ba
- - - - - -gydF4y2Ba
总gydF4y2Ba
缓存gydF4y2Ba
大小gydF4y2Ba
:gydF4y2Ba
8gydF4y2Ba
,gydF4y2Ba
192年gydF4y2Ba
|
- l选项显示我们垂直格式的输出,而不是默认的柱状的风格。现在,如果我们离开了第三个参数(这是第二个文件名称):gydF4y2Ba
|
1gydF4y2Ba
2gydF4y2Ba
3gydF4y2Ba
4gydF4y2Ba
5gydF4y2Ba
6gydF4y2Ba
7gydF4y2Ba
8gydF4y2Ba
9gydF4y2Ba
10gydF4y2Ba
11gydF4y2Ba
|
壳牌gydF4y2Ba
>gydF4y2Ba
linuxgydF4y2Ba
- - - - - -gydF4y2Ba
fincoregydF4y2Ba
- - - - - -gydF4y2Ba
lgydF4y2Ba
test_filegydF4y2Ba
_gydF4y2Ba1gydF4y2Ba
(gydF4y2Ba
。gydF4y2Ba
。gydF4y2Ba
.trimmedgydF4y2Ba
为gydF4y2Ba
简洁gydF4y2Ba
。gydF4y2Ba
。gydF4y2Ba
。gydF4y2Ba
]gydF4y2Ba
test_file_1gydF4y2Ba
大小gydF4y2Ba
:gydF4y2Ba
5gydF4y2Ba
total_pagesgydF4y2Ba
:gydF4y2Ba
1gydF4y2Ba
min_cached_pagegydF4y2Ba
:gydF4y2Ba
0gydF4y2Ba
缓存gydF4y2Ba
:gydF4y2Ba
1gydF4y2Ba
cached_sizegydF4y2Ba
:gydF4y2Ba
4gydF4y2Ba
,gydF4y2Ba
096年gydF4y2Ba
cached_percgydF4y2Ba
:gydF4y2Ba
100.00gydF4y2Ba
- - -gydF4y2Ba
- - - - - -gydF4y2Ba
总gydF4y2Ba
缓存gydF4y2Ba
大小gydF4y2Ba
:gydF4y2Ba
4gydF4y2Ba
,gydF4y2Ba
096年gydF4y2Ba
|
我们只看到gydF4y2Batest_file_1gydF4y2Ba,即使我们知道gydF4y2Batest_file_2gydF4y2Ba也是缓存。这是现在我们每次使用该工具。gydF4y2Ba
一个更有趣的例子是检查,例如,运行MySQL服务器,文件缓存。我们可以使用一个命令如下:gydF4y2Ba
|
1gydF4y2Ba
2gydF4y2Ba
3gydF4y2Ba
4gydF4y2Ba
5gydF4y2Ba
6gydF4y2Ba
7gydF4y2Ba
8gydF4y2Ba
9gydF4y2Ba
10gydF4y2Ba
|
壳牌gydF4y2Ba
>gydF4y2Ba
linuxgydF4y2Ba
- - - - - -gydF4y2Ba
fincoregydF4y2Ba
- - -gydF4y2Ba
只有gydF4y2Ba
- - - - - -gydF4y2Ba
缓存gydF4y2Ba
美元gydF4y2Ba
(gydF4y2Ba
找到gydF4y2Ba
/gydF4y2Ba
vargydF4y2Ba
/gydF4y2Ba
自由gydF4y2Ba
/gydF4y2Ba
mysqlgydF4y2Ba
/gydF4y2Ba
- - - - - -gydF4y2Ba
类型gydF4y2Ba
fgydF4y2Ba
)gydF4y2Ba
文件名gydF4y2Ba
大小gydF4y2Ba
total_pagesgydF4y2Ba
min_cachedgydF4y2Ba
页面gydF4y2Ba
cached_pagesgydF4y2Ba
cached_sizegydF4y2Ba
cached_percgydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - - - - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - - - - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - - - - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - -gydF4y2Ba
- - - - - -gydF4y2Ba
。gydF4y2Ba
。gydF4y2Ba
。gydF4y2Ba
/gydF4y2Ba
vargydF4y2Ba
/gydF4y2Ba
自由gydF4y2Ba
/gydF4y2Ba
mysqlgydF4y2Ba
/gydF4y2Ba
ibdata1gydF4y2Ba
12gydF4y2Ba
,gydF4y2Ba
582年gydF4y2Ba
,gydF4y2Ba
912年gydF4y2Ba
3gydF4y2Ba
,gydF4y2Ba
072年gydF4y2Ba
0gydF4y2Ba
3gydF4y2Ba
,gydF4y2Ba
072年gydF4y2Ba
12gydF4y2Ba
,gydF4y2Ba
582年gydF4y2Ba
,gydF4y2Ba
912年gydF4y2Ba
100.00gydF4y2Ba
/gydF4y2Ba
vargydF4y2Ba
/gydF4y2Ba
自由gydF4y2Ba
/gydF4y2Ba
mysqlgydF4y2Ba
/gydF4y2Ba
ibgydF4y2Ba
_gydF4y2Balogfile1gydF4y2Ba
50gydF4y2Ba
,gydF4y2Ba
331年gydF4y2Ba
,gydF4y2Ba
648年gydF4y2Ba
12gydF4y2Ba
,gydF4y2Ba
288年gydF4y2Ba
0gydF4y2Ba
12gydF4y2Ba
,gydF4y2Ba
288年gydF4y2Ba
50gydF4y2Ba
,gydF4y2Ba
331年gydF4y2Ba
,gydF4y2Ba
648年gydF4y2Ba
100.00gydF4y2Ba
/gydF4y2Ba
vargydF4y2Ba
/gydF4y2Ba
自由gydF4y2Ba
/gydF4y2Ba
mysqlgydF4y2Ba
/gydF4y2Ba
ibgydF4y2Ba
_gydF4y2Balogfile0gydF4y2Ba
50gydF4y2Ba
,gydF4y2Ba
331年gydF4y2Ba
,gydF4y2Ba
648年gydF4y2Ba
12gydF4y2Ba
,gydF4y2Ba
288年gydF4y2Ba
0gydF4y2Ba
12gydF4y2Ba
,gydF4y2Ba
288年gydF4y2Ba
50gydF4y2Ba
,gydF4y2Ba
331年gydF4y2Ba
,gydF4y2Ba
648年gydF4y2Ba
100.00gydF4y2Ba
。gydF4y2Ba
。gydF4y2Ba
。gydF4y2Ba
- - -gydF4y2Ba
- - - - - -gydF4y2Ba
总gydF4y2Ba
缓存gydF4y2Ba
大小gydF4y2Ba
:gydF4y2Ba
115年gydF4y2Ba
,gydF4y2Ba
634年gydF4y2Ba
,gydF4y2Ba
176年gydF4y2Ba
|
的gydF4y2Ba-only-cachedgydF4y2Ba国旗将使它不太详细,只显示输出的文件缓存。gydF4y2Ba
警告和限制gydF4y2Ba
一个警告,如前所述,是提供一个准确的文件列表来检查,否则结果将是明显错误的(如果我们试图维度整个缓存使用)。gydF4y2Ba
限制之一是有一个上限的文件我们可以检查(至少有一个命令),考虑到参数列表并不是无限的。举例来说,一个自然的方式想要检查整个缓存是使用命令如下:gydF4y2Ba
|
1gydF4y2Ba
2gydF4y2Ba
|
壳牌gydF4y2Ba
>gydF4y2Ba
linuxgydF4y2Ba
- - - - - -gydF4y2Ba
fincoregydF4y2Ba
- - -gydF4y2Ba
只有gydF4y2Ba
- - - - - -gydF4y2Ba
缓存gydF4y2Ba
美元gydF4y2Ba
(gydF4y2Ba
找到gydF4y2Ba
/gydF4y2Ba
- - - - - -gydF4y2Ba
类型gydF4y2Ba
fgydF4y2Ba
)gydF4y2Ba
- - - - - -gydF4y2Ba
bashgydF4y2Ba
:gydF4y2Ba
/gydF4y2Ba
usrgydF4y2Ba
/gydF4y2Ba
当地的gydF4y2Ba
/gydF4y2Ba
本gydF4y2Ba
/gydF4y2Ba
linuxgydF4y2Ba
- - - - - -gydF4y2Ba
fincoregydF4y2Ba
:gydF4y2Ba
论点gydF4y2Ba
列表gydF4y2Ba
太gydF4y2Ba
长gydF4y2Ba
|
命令失败,正如我们所看到的,因为我们的数量超过参数所允许的bash。gydF4y2Ba
清理页面缓存gydF4y2Ba
这个话题有点博客文章的范围,但是我认为我至少可以提一下。有三种方法如果需要手动清除页面缓存:gydF4y2Ba
1 -直接写入gydF4y2Ba/proc/sys/vm/drop_cachesgydF4y2Ba文件gydF4y2Ba
|
1gydF4y2Ba
2gydF4y2Ba
3gydF4y2Ba
|
同步gydF4y2Ba
& &gydF4y2Ba
\gydF4y2Ba
回声gydF4y2Ba
1gydF4y2Ba
>gydF4y2Ba
/gydF4y2Ba
procgydF4y2Ba
/gydF4y2Ba
sysgydF4y2Ba
/gydF4y2Ba
虚拟机gydF4y2Ba
/gydF4y2Ba
drop_cachesgydF4y2Ba
& &gydF4y2Ba
\gydF4y2Ba
回声gydF4y2Ba
3gydF4y2Ba
>gydF4y2Ba
/gydF4y2Ba
procgydF4y2Ba
/gydF4y2Ba
sysgydF4y2Ba
/gydF4y2Ba
虚拟机gydF4y2Ba
/gydF4y2Ba
compact_memorygydF4y2Ba
|
2 -使用gydF4y2BasysctlgydF4y2Ba配置工具gydF4y2Ba
|
1gydF4y2Ba
2gydF4y2Ba
|
同步gydF4y2Ba
& &gydF4y2Ba
\gydF4y2Ba
sysctlgydF4y2Ba
虚拟机gydF4y2Ba
.drop_cachesgydF4y2Ba
=gydF4y2Ba
1gydF4y2Ba
|
更多的信息关于这个gydF4y2Ba在这里gydF4y2Ba(搜索gydF4y2Badrop_cachesgydF4y2Ba部分)。gydF4y2Ba
3 -(更新:感谢LeFred输入这个!)使用gydF4y2BauncachegydF4y2Ba工具从DBSake选择性地从缓存中删除文件,而不需要驱逐整个。gydF4y2Ba
|
1gydF4y2Ba
|
dbsakegydF4y2Ba
uncachegydF4y2Ba
/gydF4y2Ba
路径gydF4y2Ba
/gydF4y2Ba
来gydF4y2Ba
/gydF4y2Ba
file_to_be_evictedgydF4y2Ba
|
我能使用它吗?gydF4y2Ba
该工具可用于检查哪些文件缓存,以及他们正在多少内存。例如,如果你看到一个内存使用量激增某些操作后,您可以:gydF4y2Ba
- 捕捉与linux-fincore初始输出gydF4y2Ba
- 刷新页面缓存(如上所示)gydF4y2Ba
- 运行有问题的操作gydF4y2Ba
- 捕捉与linux-fincore第二个示例gydF4y2Ba
然后你可以比较输出哪些文件被使用的操作,需要多少。gydF4y2Ba
进一步阅读和类似的工具gydF4y2Ba
有一个gydF4y2Ba扩展的博客gydF4y2Ba在这个问题上,有更多的工具和如何使用它们。gydF4y2Ba
uncachegydF4y2Ba- - - - - -gydF4y2Bahttps://dbsake。gydF4y2Ba
vmtouch -gydF4y2Bahttps://hoytech.com/vmtouch/gydF4y2Ba
mincore -gydF4y2Bahttp://man7.org/linux/man-pages/man2/mincore.2.htmlgydF4y2Ba






嗨Agusin !gydF4y2Ba
好帖子,我只是想点你我真的喜欢与另一个工具:gydF4y2Bahttps://dbsake.readthedocs.io/en/latest/gydF4y2Ba
dbsake允许你“uncache”特定的文件也没有放弃整个文件系统缓存,可以是危险的。这是非常有用的在阅读许多binlogs例如免费的文件系统缓存。gydF4y2Ba
欢呼。gydF4y2Ba
嘿,lefred,gydF4y2Ba
太棒了!我要博客更新,包括在最后一节,并注意清理缓存部分,。我看到它也有一个fincore-like工具(使用mincore来实现),所以它杀死了两只鸟gydF4y2Ba