~$ free
total used free shared buffers cached
Mem: 3891076 1044972 2846104 0 82744 463876
-/+ buffers/cache: 498352 3392724
Swap: 4035580 0 4035580
Run Code Online (Sandbox Code Playgroud)
buffered
和cached
.(尚未回答)buffers
和cached
?(回答)编辑
Chris 提供的这个命令成功了:
sudo bash -c 'echo 3 > /proc/sys/vm/drop_caches && sleep 2 && free'
Run Code Online (Sandbox Code Playgroud)
中“缓冲区/缓存”代表的内存free
分别是您的磁盘和文件系统缓存,Linux 缓存它们以加快从您的磁盘读取数据的速度,因为访问磁盘通常是一种相当慢的重复访问数据的方式。因此,它们被缓存在内存中,并在可用时从那里透明地提供服务。
您可以使用fincore
. 以下是项目页面中的示例:
# fincore --pages=false --summarize --only-cached *
stats for CLUSTER_LOG_2010_05_21.MYI: file size=93840384 , total pages=22910 , cached pages=1 , cached size=4096, cached perc=0.004365
stats for CLUSTER_LOG_2010_05_22.MYI: file size=417792 , total pages=102 , cached pages=1 , cached size=4096, cached perc=0.980392
stats for CLUSTER_LOG_2010_05_23.MYI: file size=826368 , total pages=201 , cached pages=1 , cached size=4096, cached perc=0.497512
stats for CLUSTER_LOG_2010_05_24.MYI: file size=192512 , total pages=47 , cached pages=1 , cached size=4096, cached perc=2.127660
stats for CLUSTER_LOG_2010_06_03.MYI: file size=345088 , total pages=84 , cached pages=43 , cached size=176128, cached perc=51.190476
Run Code Online (Sandbox Code Playgroud)
至于如何清除它们,从man 5 proc
:
/proc/sys/vm/drop_caches(从 Linux 2.6.16 开始)
写入此文件会导致内核从内存中删除干净的缓存、dentry 和 inode,从而导致该内存变为空闲。这对于内存管理测试和执行可重现的文件系统基准测试非常有用。因为写入此文件会导致缓存的好处丢失,所以它会降低整体系统性能。
- 要释放页面缓存,请使用:
echo 1 > /proc/sys/vm/drop_caches
- 要释放 dentry 和 inode,请使用:
echo 2 > /proc/sys/vm/drop_caches
- 要释放页面缓存、dentries 和 inode,请使用:
echo 3 > /proc/sys/vm/drop_caches
因为写入这个文件是一个非破坏性的操作并且脏对象是不可释放的,所以用户应该首先运行 sync(8)。
您通常不想刷新缓存,因为它的全部目的是提高性能,但出于调试目的,您可以drop_caches
像这样使用(注意:您必须是 root 才能使用 drop_caches,但同步可以像任何用户):
# sync && echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
小智 6
fincore
是查看页面缓存中存在多少特定文件的有用工具。\n 为了找到哪些文件被添加到页面缓存中,\n我发现内核跟踪点filemap:mm_filemap_add_to_page_cache
\n很有用。
前任:
\n# perf record -a -e filemap:mm_filemap_add_to_page_cache sleep 60\n# perf script\n[...]\n perf_5.7 889 [005] 17.077676: filemap:mm_filemap_add_to_page_cache: dev 0:3 ino 0 page=0x234161 pfn=2310497 ofs=12897742848\n perf_5.7 889 [005] 17.078127: filemap:mm_filemap_add_to_page_cache: dev 0:3 ino 0 page=0x228440 pfn=2262080 ofs=13017223168\n perf_5.7 889 [005] 17.078457: filemap:mm_filemap_add_to_page_cache: dev 254:1 ino c23cf page=0x22d236 pfn=2282038 ofs=0\n perf_5.7 889 [005] 17.078460: filemap:mm_filemap_add_to_page_cache: dev 254:1 ino c23cf page=0x228447 pfn=2262087 ofs=4096\n[...]\n
Run Code Online (Sandbox Code Playgroud)\n可以使用将数字dev <major>:<minor>
映射到设备节点lsblk
。
# lsblk\nNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\nfd0 2:0 1 4K 0 disk\nsr0 11:0 1 1024M 0 rom\nvda 254:0 0 20G 0 disk\n\xe2\x94\x94\xe2\x94\x80vda1 254:1 0 20G 0 part /\n
Run Code Online (Sandbox Code Playgroud)\n(我不确定“0:x”条目是什么,也许匿名映射也会触发该跟踪点?)
\n可以使用 .inode 编号将其映射到文件find [...] -inum <decimal>
。
# find / -mount -inum $((0xc23cf))\n/usr/bin/sleep\n
Run Code Online (Sandbox Code Playgroud)\n在紧要关头,输出可以变得更容易接受,如下所示:
\n# perf script | grep -v "dev 0:" | \\\n awk '\n {\n match($0, "ino ([^ ]+)", a)\n print a[1]\n }\n ' | sort | uniq -c | sort -n | \\\n while read count inode; do\n echo "$count $inode $(find / -mount -inum $((0x$inode)))"\n done\n\n[...]\n20 c1950 /usr/lib/apt/methods/rred\n27 c194a /usr/lib/apt/methods/gpgv\n36 4203f\n36 60070\n36 60080 /var/lib/apt/lists/deb.debian.org_debian_dists_unstable_InRelease\n36 c1f24 /usr/bin/cp\n40 c04a6 /usr/bin/gpg-connect-agent\n47 c194c /usr/lib/apt/methods/http\n50 60340 /var/lib/apt/lists/deb.debian.org_debian_dists_unstable_contrib_source_Sources\n[...]\n
Run Code Online (Sandbox Code Playgroud)\n第一列对应于换入的页数。推测没有文件名的 inode 已被删除。
\n 归档时间: |
|
查看次数: |
21209 次 |
最近记录: |