Buffer和Cache
Buffer 是缓冲区,而 Cache 是缓存,两者都是数据在内存中的临时存储。
Buffer 是对磁盘数据的缓存,而 Cache 是文件数据的缓存,它们既会用在读请求中,也会用在写请求中。
磁盘是一个块设备,可以划分为不同的分区;在分区之上再创建文件系统,挂载到某个目录,之后才可以在这个目录中读写文件。
Linux 中“一切皆文件”,平时提到的“文件”是普通文件,磁盘是块设备文件。
在读写普通文件时,会经过文件系统,由文件系统负责与磁盘交互;而读写磁盘或者分区时,就会跳过文件系统,也就是所谓的“裸I/O“。这两种读写方式所使用的缓存是不同的,也就是文中所讲的 Cache 和 Buffer 区别。
Buffers 是内核缓冲区用到的内存,对应的是 /proc/meminfo 中的 Buffers 值。
Cache 是内核页缓存和 Slab 用到的内存,对应的是 /proc/meminfo 中的 Cached 与 SReclaimable 之和。
查看Buffer&Cache使用率高的进程有哪些
wget https://silenceshell-1255345740.cos.ap-shanghai.myqcloud.com/hcache
chmod 755 hcache && mv hcache /usr/local/bin/
hcache命令
全局显示10个最大的被缓存文件
hcache --top10
[root@nginx1 work]# hcache --top 10
+---------------------------------------------------------+----------------+------------+-----------+---------+
| Name | Size (bytes) | Pages | Cached | Percent |
|---------------------------------------------------------+----------------+------------+-----------+---------|
| /usr/local/jdk1.8.0_151/jre/lib/rt.jar | 66266965 | 16179 | 4418 | 027.307 |
| /usr/local/jdk1.8.0_151/jre/lib/amd64/server/libjvm.so | 17014509 | 4154 | 4154 | 100.000 |
| /usr/local/percona/pmm2/exporters/node_exporter | 13661974 | 3336 | 3336 | 100.000 |
| /usr/local/percona/pmm2/exporters/vmagent | 13047474 | 3186 | 3186 | 100.000 |
| /usr/local/ilogtail/ilogtail_1.4.0 | 11936928 | 2915 | 2915 | 100.000 |
| /usr/local/share/assist-daemon/assist_daemon | 6899196 | 1685 | 1685 | 100.000 |
| /usr/local/nginx/sbin/nginx | 6773421 | 1654 | 1654 | 100.000 |
| /usr/local/share/aliyun-assist/2.2.3.421/aliyun-service | 29966853 | 7317 | 1409 | 019.257 |
| /usr/local/percona/pmm2/bin/pmm-agent | 34498089 | 8423 | 937 | 011.124 |
| /usr/local/aegis/aegis_update/AliYunDunUpdate | 3834824 | 937 | 937 | 100.000 |
+---------------------------------------------------------+----------------+------------+-----------+---------+
然后定位进程信息
[root@nginx1 work]# lsof /usr/local/jdk1.8.0_151/jre/lib/rt.jar
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 14008 devops mem REG 252,1 66266965 1071202 /usr/local/jdk1.8.0_151/jre/lib/rt.jar
java 14008 devops 3r REG 252,1 66266965 1071202 /usr/local/jdk1.8.0_151/jre/lib/rt.jar
手动回收Cache
[root@nginx1 work]# echo 1 > /proc/sys/vm/drop_caches
[root@nginx1 work]# free -g
total used free shared buffers cached
Mem: 31 9 22 0 0 0
-/+ buffers/cache: 9 22
Swap: 0 0 0