- Buffer:是优化磁盘的读写
Cache:是优化文件的读写
我们的程序可以通过优化Buffer和Cache来提高我们程序的运行效率。所谓工欲善其事必先利其器,我们下面介绍下如何去看我们内存的cache情况。
指标和工具
查看cache的命中情况我们主要会去查看cache的命中率。我们可以使用bcc-tools下的cachestat和cachetop
- cachestat:统计整体内存的cache情况
- cachetop:统计进程的内存cache情况
1 | $ cachestat 1 3 |
- TOTAL:表示总的 I/O 次数
- MISSES:缓存未命中
- HITS:缓存命中
- DIRTIES:脏页
- BUFFERS_MB:buffer的数据
- CACHED_MB:cache的数据
1 |
|
它的输出跟 top 类似,默认按照缓存的命中次数(HITS)排序,展示了每个进程的缓存命中情况。具体到每一个指标,这里的 HITS、MISSES 和 DIRTIES ,跟 cachestat 里的含义一样,分别代表间隔时间内的缓存命中次数、未命中次数以及新增到缓存中的脏页数。而 READ_HIT 和 WRITE_HIT ,分别表示读和写的缓存命中率。
还有一个缓存数据的大小的指标我们一般也会很关心,我们可以通过go语言写的pcstat查看
1 |
|
这个就是/bin/ls的缓存情况
查找问题思路
我们通过cachetop找到问题的缓存命中率情况,有一种情况缓存命中率很高。但是缓存命中的数据很少【计算方式,HITS命中数*4k,因为缓存死以page为单位存的以page为4k】