命中率越高,表示使用缓存带来的收益越高,应用程序的性能也就越好。

缓存是现在所有高并发系统必需的核心模块,主要作用就是把经常访问的数据(也就是热点数据),提前读入到内存中。这样,下次访问时就可以直接从内存读取数据,而不需要经过硬盘,从而加快应用程序的响应速度。

这些独立的缓存模块通常会提供查询接口,方便我们随时查看缓存的命中情况。

不过 Linux 系统中并没有直接提供这些接口,所以这里我要介绍一下,cachestat 和 cachetop ,它们正是查看系统缓存命中情况的工具。

cachestat 提供了整个操作系统缓存的读写命中情况。

cachetop 提供了每个进程的缓存命中情况。

这两个工具都是 bcc 软件包的一部分,它们基于 Linux 内核的 eBPF(extended Berkeley Packet Filters)机制,来跟踪内核中管理的缓存,并输出缓存的使用和命中情况。

使用 cachestat 和 cachetop 前,我们首先要安装 bcc 软件包。比如,在 Ubuntu 系统中,你可以运行下面的命令来安装:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4052245BD4284CDD

echo "deb https://repo.iovisor.org/apt/xenial xenial main" | sudo tee /etc/apt/sources.list.d/iovisor.list

sudo apt-get update

sudo apt-get install -y bcc-tools libbcc-examples linux-headers-$(uname -r)

注意:bcc-tools需要内核版本为4.1或者更新的版本,如果你用的是CentOS,那就需要手动升级内核版本后再安装。

Centos7安装bcc-tools

第一步,升级内核。你可以运行下面的命令来操作:

升级系统

yum update -y

安装ELRepo

安装新内核

yum remove -y kernel-headers kernel-tools kernel-tools-libs

yum --enablerepo="elrepo-kernel" install -y kernel-ml kernel-ml-devel kernel-ml-headers kernel-ml-tools kernel-ml-tools-libs kernel-ml-tools-libs-devel

更新Grub后重启

grub2-mkconfig -o /boot/grub2/grub.cfg

grub2-set-default 0

reboot

重启后确认内核版本已升级为4.20.0-1.el7.elrepo.x86_64

uname -r

第二步,安装 bcc-tools:

安装bcc-tools

yum install -y bcc-tools

配置PATH路径

export PATH=$PATH:/usr/share/bcc/tools

验证安装成功

cachestat

操作完这些步骤,bcc 提供的所有工具就都安装到 /usr/share/bcc/tools 这个目录中了。不过这里提醒你,bcc 软件包默认不会把这些工具配置到系统的 PATH 路径中,所以你得自己手动配置:

$ export PATH=$PATH:/usr/share/bcc/tools

配置完,你就可以运行 cachestat 和 cachetop 命令了。比如,下面就是一个 cachestat 的运行界面,它以1秒的时间间隔,输出了3组缓存统计数据:

$ cachestat 1 3

TOTAL MISSES HITS DIRTIES BUFFERS_MB CACHED_MB

2 0 2 1 17 279

2 0 2 1 17 279

2 0 2 1 17 279

你可以看到,cachestat 的输出其实是一个表格。每行代表一组数据,而每一列代表不同的缓存统计指标。这些指标从左到右依次表示:

TOTAL ,表示总的 I/O 次数;

MISSES ,表示缓存未命中的次数;

HITS ,表示缓存命中的次数;

DIRTIES, 表示新增到缓存中的脏页数;

BUFFERS_MB 表示 Buffers 的大小,以 MB 为单位;

CACHED_MB 表示 Cache 的大小,以 MB 为单位。

接下来我们再来看一个 cachetop 的运行界面:

$ cachetop

11:58:50 Buffers MB: 258 / Cached MB: 347 / Sort: HITS / Order: ascending

PID UID CMD HITS MISSES DIRTIES READ_HIT% WRITE_HIT%

13029 root python 1 0 0 100.0% 0.0%

它的输出跟 top 类似,默认按照缓存的命中次数(HITS)排序,展示了每个进程的缓存命中情况。具体到每一个指标,这里的 HITS、MISSES和DIRTIES ,跟 cachestat 里的含义一样,分别代表间隔时间内的缓存命中次数、未命中次数以及新增到缓存中的脏页数。

而 READ_HIT 和 WRITE_HIT ,分别表示读和写的缓存命中率。

指定文件的缓存大小

除了缓存的命中率外,还有一个指标你可能也会很感兴趣,那就是指定文件在内存中的缓存大小。你可以使用 pcstat 这个工具,来查看文件在内存中的缓存大小以及缓存比例。

pcstat 是一个基于 Go 语言开发的工具,所以安装它之前,你首先应该安装 Go 语言;

安装完 Go 语言,再运行下面的命令安装 pcstat:

$ export GOPATH=~/go

$ export PATH=~/go/bin:$PATH

$ go get golang.org/x/sys/unix

$ go get github.com/tobert/pcstat/pcstat

全部安装完成后,你就可以运行 pcstat 来查看文件的缓存情况了。比如,下面就是一个 pcstat 运行的示例,它展示了 /bin/ls 这个文件的缓存情况:

$ pcstat /bin/ls

+---------+----------------+------------+-----------+---------+

| Name | Size (bytes) | Pages | Cached | Percent |

|---------+----------------+------------+-----------+---------|

| /bin/ls | 133792 | 33 | 0 | 000.000 |

+---------+----------------+------------+-----------+---------+

这个输出中,Cached 就是 /bin/ls 在缓存中的大小,而 Percent 则是缓存的百分比。你看到它们都是 0,这说明 /bin/ls 并不在缓存中。

接着,如果你执行一下 ls 命令,再运行相同的命令来查看的话,就会发现 /bin/ls 都在缓存中了:

$ ls

$ pcstat /bin/ls

+---------+----------------+------------+-----------+---------+

| Name | Size (bytes) | Pages | Cached | Percent |

|---------+----------------+------------+-----------+---------|

| /bin/ls | 133792 | 33 | 33 | 100.000 |

+---------+----------------+------------+-----------+---------+

linux下cache分析工具,cachestat、cachetop、pcstat-linux系统缓存命中率分析工具相关推荐

  1. cachestat、cachetop、pcstat-linux系统缓存命中率分析工具

    命中率越高,表示使用缓存带来的收益越高,应用程序的性能也就越好. 缓存是现在所有高并发系统必需的核心模块,主要作用就是把经常访问的数据(也就是热点数据),提前读入到内存中.这样,下次访问时就可以直接从 ...

  2. partprobe使用方法_教程方法;linux下使用fdisk结合partprobe命令不重启系统添加一块新的磁盘分区电脑技巧-琪琪词资源网...

    琪琪词资源网-教程方法;linux下使用fdisk结合partprobe命令不重启系统添加一块新的磁盘分区电脑技巧,以下是给大家带来的教程方法;linux下使用fdisk结合partprobe命令不重 ...

  3. linux格式化大于2t硬盘分区,linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区...

    linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找 ...

  4. 在linux下vcd光盘提取,linux下抓取Vcd的视频文件[Linux安全]

    赞助商链接 本文"linux下抓取Vcd的视频文件[Linux安全]"是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判 ...

  5. linux 下mysql忘记密码或者安装好linux后不知道mysql初始密码解决方案

    linux 下mysql忘记密码或者安装好linux后不知道mysql初始密码解决方案 参考文章: (1)linux 下mysql忘记密码或者安装好linux后不知道mysql初始密码解决方案 (2) ...

  6. linux中替换文件中的内容,linux下批量替换文件中的内容linux操作系统 -电脑资料...

    对于单个文件,使用sed命令很容易做到, grep命令可以查找单个文件或文件夹下文件中的内容,使用参数"r"或"-R"可以递归查找指定文件夹下的所有文件:参数& ...

  7. linux 下tar怎样解压zip文件,linux下 zip解压 tar解压 gz解压 bz2等各种解压文件命令(示例代码)...

    简介这篇文章主要介绍了linux下 zip解压 tar解压 gz解压 bz2等各种解压文件命令(示例代码)以及相关的经验技巧,文章约6037字,浏览量504,点赞数7,值得推荐! .tar 解包:ta ...

  8. linux下做u盘启动权限不够,Linux U盘启动安装制作工具unetbootin - 第一原理 - 小木虫 - 学术 科研 互动社区...

    http://baike.baidu.com/view/1434744.htm UNetbootin (Universal Netboot Installer)为一种跨平台工具软件,可以用来建立Liv ...

  9. linux下php可以实现哪些功能,基于Linux的远程管理系统的设计与实现(PHP)

    基于Linux的远程管理系统的设计与实现(PHP) 来源:2BYSJ.cn 资料编号:2SJ260700 资料等级:★★★★★ %D7%CA%C1%CF%B1%E0%BA%C5%A3%BA2SJ260 ...

最新文章

  1. 二叉树非递归遍历的经典求解
  2. 未能加载文件或程序集“*****.dll”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。(异常来自HRESULT:0x80131040)
  3. Android edittext 属性inputtype详解
  4. ToString()的格式设置
  5. 快速锁屏电脑快捷键_一学就会的8个电脑快捷键一定要掌握!堪称“高效”神器...
  6. Odoo10教程---模块化三:模型约束,高级视图,工作流,安全性,向导,国际化和报表等
  7. mysql skip slave_MYSQL replication slave-skip-errors 详解
  8. java motherfree video_Java Config 下的Spring Test方式
  9. centos7删除符号链接_如何在 Linux 上查找和删除损坏的符号链接 | Linux 中国
  10. SpringSecurity入门到入土教程_2 Oauth教程
  11. 个性化推荐系统实践应用
  12. 万能五笔2005输入法平台6.46版---试用手记
  13. Java项目开发-基于Java的宠物领养管理系统(附源码)
  14. Python 信号处理——包络分析
  15. fedora linux搜狗输入法,Linux_Fedora20 32位系统中安装搜狗拼音输入法图文教程,搜狗输入法在windows系统中是非 - phpStudy...
  16. 英雄无敌6服务器在哪个文件夹,魔法门英雄无敌6:生物-墓园资料
  17. 本地运行Flink-DIMAPP出现问题
  18. Metro风格的CSS框架 BootMetro
  19. 计算机管理要继续请输入,Windows 10上提示UAC错误:如要继续请输入管理员密码!...
  20. 区块链Oracle预言机实现教程【含代码】

热门文章

  1. 使用ExtJS做一个用户的增删改查
  2. 10个学习Android开发的网站推荐
  3. nginx+php-fpm 502 bad gateway
  4. 格密码教程(四):SVP和CVP,Hermite定理,Blichfeld定理和Minkowski定理
  5. 键值数据库LevelDB的优缺点及性能分析
  6. 柱状图、堆叠柱状图、瀑布图有什么区别?怎样用Python绘制?
  7. 面试官:你知道Redis得持久化机制吗?
  8. JeecgBoot 单体升级微服务快速方案(十分钟搞定)
  9. JEEWX推出插件开发机制,现招募兴趣爱好者
  10. JEECG Online Coding 开发操作图解