`
weiyinchao88
  • 浏览: 1185975 次
文章分类
社区版块
存档分类
最新评论

Linux下谁在消耗我们的cache

 
阅读更多

转自:http://blog.yufeng.info/archives/688

Linux下对文件的访问和设备的访问通常会被cache起来加快访问速度,这个是系统的默认行为。 而cache需要耗费我们的内存,虽然这个内存最后可以通过echo 3>/proc/sys/vm/drop_caches这样的命令来主动释放。但是有时候我们还是需要理解谁消耗了我们的内存。

我们来先了解下内存的使用情况:

[root@my031045 ~]# free
total used free shared buffers cached
Mem: 24676836 626568 24050268 0 30884 508312
-/+ buffers/cache: 87372 24589464
Swap: 8385760

有了伟大的systemtap, 我们可以用stap脚本来了解谁在消耗我们的cache了:

#这个命令行用来调查谁在加数据入page_cache
[root@my031045 ~]# stap -e 'probe vfs.add_to_page_cache {printf("dev=%d, devname=%s, ino=%d, index=%d, nrpages=%d/n", dev, devname, ino, index, nrpages )}'
...
dev=2, devname=N/A, ino=0, index=2975, nrpages=1777
dev=2, devname=N/A, ino=0, index=3399, nrpages=2594
dev=2, devname=N/A, ino=0, index=3034, nrpages=1778
dev=2, devname=N/A, ino=0, index=3618, nrpages=2595
dev=2, devname=N/A, ino=0, index=1694, nrpages=106
dev=2, devname=N/A, ino=0, index=1703, nrpages=107
dev=2, devname=N/A, ino=0, index=1810, nrpages=210
dev=2, devname=N/A, ino=0, index=1812, nrpages=211
...

这时候我们拷贝个大文件:

[chuba@my031045 ~]$ cp huge_foo.file bar
#这时候我们可以看到文件的内容被猛的添加到cache去:
...
dev=8388614, devname=sda6, ino=2399271, index=39393, nrpages=39393
dev=8388614, devname=sda6, ino=2399271, index=39394, nrpages=39394
dev=8388614, devname=sda6, ino=2399271, index=39395, nrpages=39395
dev=8388614, devname=sda6, ino=2399271, index=39396, nrpages=39396
dev=8388614, devname=sda6, ino=2399271, index=39397, nrpages=39397
dev=8388614, devname=sda6, ino=2399271, index=39398, nrpages=39398
dev=8388614, devname=sda6, ino=2399271, index=39399, nrpages=39399
dev=8388614, devname=sda6, ino=2399271, index=39400, nrpages=39400
dev=8388614, devname=sda6, ino=2399271, index=39401, nrpages=39401
dev=8388614, devname=sda6, ino=2399271, index=39402, nrpages=39402
dev=8388614, devname=sda6, ino=2399271, index=39403, nrpages=39403
dev=8388614, devname=sda6, ino=2399271, index=39404, nrpages=39404
dev=8388614, devname=sda6, ino=2399271, index=39405, nrpages=39405
dev=8388614, devname=sda6, ino=2399271, index=39406, nrpages=39406
dev=8388614, devname=sda6, ino=2399271, index=39407, nrpages=39407
dev=8388614, devname=sda6, ino=2399271, index=39408, nrpages=39408
dev=8388614, devname=sda6, ino=2399271, index=39409, nrpages=39409
dev=8388614, devname=sda6, ino=2399271, index=39410, nrpages=39410
dev=8388614, devname=sda6, ino=2399271, index=39411, nrpages=39411
...

此外加入我们想了解下系统的cache都谁在用呢, 那个文件用到多少页了呢?
我们有个脚本可以做到,这里非常谢谢 子团 让我使用他的代码。

[chuba@my031045 ~]# stap -g viewcache.stp
在另外的shell里面
[chuba@my031045 ~]# dmesg
...
inode: 116397109, num: 5
inode: 116397111, num: 2
inode: 116397112, num: 1
inode: 116397149, num: 2
inode: 116397152, num: 1
inode: 116397336, num: 2
inode: 116397343, num: 1
inode: 116397371, num: 4
inode: 116397372, num: 2
...

非常清楚的看出来每个inode占用了多少页,用工具转换下就知道哪个文件耗费了多少内存。

点击下载viewcache.stp

另外小TIPS:

从inode到文件名的转换
find / -inum your_inode

从文件名到inode的转换
stat -c “%i” your_filename
或者 ls -i your_filename

我们套用了下就马上知道那个文件占用的cache很多。

[chuba@my031045 ~]$ sudo find / -inum 2399248
/home/chuba/kernel-debuginfo-2.6.18-164.el5.x86_64.rpm

玩的开心。

参考资料:
page cache和buffer cache的区别:
这篇文章总结的最靠谱: http://blog.chinaunix.net/u/1595/showart.php?id=2209511

后记:
linux下有个这样的系统调用可以知道页面的状态:mincore – determine whether pages are resident in memory
同时有人作个脚本fincore更方便大家的使用, 点击下载fincore

后来子团告诉我还有这个工具: https://code.google.com/p/linux-ftools/

分享到:
评论

相关推荐

    Linux下内存统计和内存泄露类问题的定位方法

     Linux在内存使用上的原则是:如果内存充足,不用白不用,尽量使用内存来缓存一些文件,从而加快进程的运行速度,而当内存不足时,会通过相应的内存回收策略收回cache内存,供进程使用。  一、系统总内存的分析...

    入门学习Linux常用必会60个命令实例详解doc/txt

    上面代码中,第一行是Linux发行版本号,第二行是内核版本号和登录的虚拟控制台,我们在第三行输入登录名,按“Enter”键在Password后输入账户密码,即可登录系统。出于安全考虑,输入账户密码时字符不会在屏幕上回显...

    Postgres8.3.3增强版(添加SQL执行信息统计功能)

    它可以显示每条 SQL 语句的执行次数、执行时间、消耗的CPU时间、读cache次数、命中cache 次数。 它可以帮你找到执行时间最长,消耗资源最多的SQL。对于事务处理,如果一条SQL语句在执行时读cache的次数达到了2000...

    Nginx:取代apache的高性能服务器

    Nginx选择了epoll和kqueue作为网络I/O模型,在高连接并发的情况下,Nginx是Apache服务器不错的替代品,它能够支持高达50 000个并发连接数的响应,运行稳定,且内存、CPU等系统资源消耗非常低。, 本书主要分为4个部分...

    perl论坛程序CCB v20110627 简体中文 GBK.zip

    2 新开发了超强的在线人员列表功能,在线列表可以按栏目分类显示,而且采用缓存cache方法进行的优化设计,不会消耗大量的系统资源  增加社区的互动性和趣味性. 3 集成了经典的社区游戏功能 4 为了方便海外人士阅读...

    perl论坛程序CCB v20110627 简体中文 UTF8.zip

    2 新开发了超强的在线人员列表功能,在线列表可以按栏目分类显示,而且采用缓存cache方法进行的优化设计,不会消耗大量的系统资源  增加社区的互动性和趣味性. 3 集成了经典的社区游戏功能 4 为了方便海外人士阅读...

    perl论坛程序CCB v20110627 繁体中文 UTF8.zip

    2 新开发了超强的在线人员列表功能,在线列表可以按栏目分类显示,而且采用缓存cache方法进行的优化设计,不会消耗大量的系统资源  增加社区的互动性和趣味性. 3 集成了经典的社区游戏功能 4 为了方便海外人士阅读...

    实战Nginx.取代Apache的高性能Web服务器.2010 pdf

    Nginx选择了epoll和kqueue作为网络I/O模型,在高连接并发的情况下,Nginx是Apache服务器不错的替代品,它能够支持高达50 000个并发连接数的响应,运行稳定,且内存、CPU等系统资源消耗非常低。  本书主要分为4个...

    mysql 性能的检查和优化方法

    在linux下执行 /usr/local/mysql/bin/mysql -hlocalhost -uroot -p 输入密码,如果没有密码,则不用-p参数就可以进到客户端界面中。 看看当前的运行情况 show full processlist 可以多运行几次 这个命令可以看到...

    实战Nginx:取代Apache的高性能Web服务器

    Nginx选择了epoll和kqueue作为网络I/O模型,在高连接并发的情况下,Nginx是Apache服务器不错的替代品,它能够支持高达50000个并发连接数的响应,运行稳定,且内存、CPU等系统资源消耗非常低。  本书主要分为4个部分...

    杰奇1.4 破解版+注册机

    blockcache - 区块缓存目录,可在后台设置目录名称 cache - 网页缓存目录,可在后台设置目录名称 configs - 配置文件目录 compiled - 编译文件目录 files - 用户上传或者网站程序生成文件保存的目录,可在后台...

    杰奇1.4 破解版

    blockcache - 区块缓存目录,可在后台设置目录名称 cache - 网页缓存目录,可在后台设置目录名称 configs - 配置文件目录 compiled - 编译文件目录 files - 用户上传或者网站程序生成文件保存的目录,可在后台...

    go_BreakpointdownloadwithProxy:一个断点下载的程序,包括server端、代理端和客户端

    可执行文件在Linux环境下运行,程序通过测试选择一个外网速度最快的代理(测试不需要消耗额外的流量)来下载文件。 各个模块分别的启动方法如下: pull 功能: 拉取文件的客户端 参数: ./ pull -h Usage of ./...

    杰奇1.3标准版

    <br> 二、安装步骤 <br>1、上传所有程序和模板文件,以下几个目录以及目录下所有文件的权限需设置成 777 blockcache - 区块缓存目录,可在后台设置目录名称 cache - 网页缓存目录,可在后台设置...

    cphalcon7:Dao7-PHP7.x的Web框架

    Phalcon7(Dao7)框架Phalcon7是实现为C扩展的Web框架,可提供高性能和较低的资源消耗。Phalcon7是什么? Phalcon7是继承自Phalcon 1.3.x,开源,全功能栈,使用C编写,针对PHP 7优化的高性能框架。开发者不需要学习...

Global site tag (gtag.js) - Google Analytics