Linux 清空缓存命令

简介: 某些时候需要把linux 的缓存清理一下。使用时需要区分参数的不同

某些时候需要把linux 的缓存清理一下。使用时需要区分参数的不同

  • 0:不做任何处理,由系统自己管理
  • 1清空pagecache
  • 2清空dentries和inodes
  • 3 清空pagecache、dentries和inodes

说的具体就是 :

echo 1是释放页缓存,echo 2 是释放slab(dentries,inodes),而echo 3就是既释放页缓存,又释放slab。

什么是slab

To free pagecache:
# echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
# echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches

参考 :https://linux-mm.org/Drop_Caches


-------------------------------------------------update 2021/01/23


drop_cache会情况脏页吗?

先说答案,不会的。

看官方这段描述。

20210123225922542.png让我用蹩脚的英语翻译下吧:  不是毁灭性的操作,也不会释放脏页。如果想释放更多, 先执行sync 也就是手动刷盘,这会使系统上的脏页变少,释放更多内存。

以下内容来自: https://www.dazhuanlan.com/2019/10/05/5d986e3c55468/

linux/fs/drop_caches.c

问题一:echo 写入之后,值不会变,怎么办?会不会一直在drop?

不会,看看代码:

linux/fs/drop_caches.c

int drop_caches_sysctl_handler(struct ctl_table *table, int write,
        void __user *buffer, size_t *length, loff_t *ppos)
{
        int ret;
        ret = proc_dointvec_minmax(table, write, buffer, length, ppos);
        if (ret)
            return ret;
        if (write) {
            static int stfu;
            if (sysctl_drop_caches & 1) {
                iterate_supers(drop_pagecache_sb, NULL);
                count_vm_event(DROP_PAGECACHE);
            }
            if (sysctl_drop_caches & 2) {
                drop_slab();
                count_vm_event(DROP_SLAB);
            }
            if (!stfu) {
                pr_info("%s (%d): drop_caches: %dn",
                        current->comm, task_pid_nr(current),
                        sysctl_drop_caches);
           }
           stfu |= sysctl_drop_caches & 4;
    }
    return 0;
}

write 为True 的时候,才会执行drop 。

另外proc_dointvec_minmax() 这个函数的作用是检查传入的值符合大小,drop_cache 允许的值是1,2,3,4。


Reads/writes up to table->maxlen/sizeof(unsigned int) integer values from/to the user buffer, treated as an ASCII string.

This routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max).

Returns 0 on success.


linux/kernel/sysctl.c

{

   .procname        = "drop_caches",

   .data            = &sysctl_drop_caches,

   .maxlen          = sizeof(int),

   .mode            = 0644,

   .proc_handler    = drop_caches_sysctl_handler,

   .extra1          = &one,

   .extra2          = &four,

},

虽然默认值是0,但是如果你尝试写回0,是会失败的:


-> echo 0 > /proc/sys/vm/drop_caches

echo: write error: invalid argument


另外可以看到sysctl_drop_caches 为3(11b) 时,和1,2 做& 操作,都为True,所以都会drop。

问题二:echo 写入4,是什么效果?

4(100b),和1,2做& 操作,都为False,所以不会drop,相当于关闭了drop 功能。


stfu 为静态变量,第一次执行之后,stfu 为4,if (!stfu) 也始终为False。不过感觉这里有个问题,echo 4 一次之后,stfu 会始终为4,即使再echo 1|2|3,都无法改变,虽然能正常drop,但是pr_info 语句无法执行,dmesg 看不到日志,除非重启。


stfu |= sysctl_drop_caches & 4;

参考 :https://linux-mm.org/Drop_Caches

 

有时候会看到io_wait 很高

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.75   15.86   32.50   11.62    0.00   38.27
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda           18591.20   3021782.40     39254.40   15108912     196272
sdb              18.60       564.80        65.60       2824        328
sdc           10753.20   1828172.80       668.80    9140864       3344
dm-0              1.80        68.80         0.00        344          0
dm-1             38.40       289.60        17.60       1448         88
dm-2           2605.00    430827.20        38.40    2154136        192
dm-3           2623.40    433995.20        48.00    2169976        240
dm-4           2640.00    467483.20        46.40    2337416        232
dm-5           2881.20    496520.00        57.60    2482600        288
dm-6              7.60         0.00       126.40          0        632
dm-7              1.40         0.00        59.20          0        296
dm-8              1.80         0.00        52.80          0        264
dm-9              8.00         0.00       240.00          0       1200
dm-10             5.80         1.60        44.80          8        224
dm-11             0.00         0.00         0.00          0          0
dm-12             0.00         0.00         0.00          0          0
dm-13             2.20       204.80         0.00       1024          0
dm-14             0.00         0.00         0.00          0          0
dm-15             0.40         0.00         3.20          0         16
dm-16          4705.20    784801.60      4880.00    3924008      24400
dm-17          4284.40    706841.60      4720.00    3534208      23600
dm-18          4341.40    669716.80      4452.80    3348584      22264
dm-19          5045.80    858899.20      6580.80    4294496      32904
dm-20           101.80         0.00      4016.00          0      20080
dm-21           118.00         0.00      4937.60          0      24688
dm-22           117.20         0.00      4944.00          0      24720
dm-23           106.40         0.00      4195.20          0      20976
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.83   15.55   19.35   14.46    0.00   48.81
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda           17328.80   3038740.80     50593.60   15193704     252968
sdb              14.20       276.80        72.00       1384        360
sdc           14302.40   2272651.20      1105.60   11363256       5528
dm-0              4.40        70.40         0.00        352          0
dm-1             21.20       147.20        22.40        736        112
dm-2           3913.00    602876.80        91.20    3014384        456
dm-3           3186.80    512590.40       124.80    2562952        624
dm-4           3562.20    561380.80       137.60    2806904        688
dm-5           3619.80    596126.40       115.20    2980632        576
dm-6              2.00         0.00       100.80          0        504
dm-7             11.60         0.00       348.80          0       1744
dm-8              4.60         0.00       104.00          0        520
dm-9              3.20         0.00        83.20          0        416
dm-10             4.60         0.00        36.80          0        184
dm-11             0.00         0.00         0.00          0          0
dm-12             0.00         0.00         0.00          0          0
dm-13             0.00         0.00         0.00          0          0
dm-14             1.60        59.20         0.00        296          0
dm-15             1.60         0.00        12.80          0         64
dm-16          4023.40    656966.40      7571.20    3284832      37856
dm-17          4750.00    976304.00      6043.20    4881520      30216
dm-18          3998.00    646822.40      7980.80    3234112      39904
dm-19          4242.60    760747.20      6931.20    3803736      34656
dm-20           136.60         0.00      5846.40          0      29232
dm-21           146.00         0.00      6102.40          0      30512
dm-22           133.60         0.00      5046.40          0      25232
dm-23           124.60         0.00      4659.20          0      23296
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.90   21.38   26.90   10.75    0.00   39.08
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda           17252.80   2126377.60     36427.20   10631888     182136
目录
相关文章
|
17小时前
|
Linux
Linux的top命令是什么,如何使用
【6月更文挑战第30天】Linux的top命令是什么,如何使用
6 1
|
1天前
|
Linux 数据处理
探索Linux下的readlink命令:解析符号链接的利器
`readlink`命令在Linux中用于揭示符号链接的指向,显示它们所链接的实际文件或目录的路径。它可以显示简洁的绝对路径(-f),处理循环链接(-e),或不加换行符输出(-n)。例如,查看`link.txt`指向:`readlink link.txt`;获取绝对路径:`readlink -f link.txt`。使用时要注意链接是否存在、权限问题和可能的循环链接。
|
1天前
|
Linux 数据处理
探索Linux下的readelf命令:深入了解ELF文件
`readelf`是Linux下分析ELF文件的命令行工具,用于查看文件头、节区、符号表等信息。支持可执行文件、共享库等多种类型。常用选项有`-h`(文件头)、`-l`(程序头)、`-S`(节区)、`-s`(符号表)、`-r`(重定位)和`-d`(动态节区)。结合其他工具如`objdump`,能深入理解二进制文件,助力开发和调试。
|
1天前
|
Linux
常用的Linux系统命令及其使用技巧
常用的Linux系统命令及其使用技巧
|
2天前
|
存储 安全 Linux
深入解析Linux的`read`命令
`read`命令在Linux shell中用于从标准输入读取数据并赋值给变量。它可以用于交互式脚本,提供用户输入或读文件。关键选项包括`-p`(提示用户)、`-r`(禁用转义)、`-s`(静默模式,适合密码)、`-t`(超时)和`-n`(读取特定字符数)。示例包括基本输入、带提示的密码输入和设置超时的输入。注意安全处理密码和验证用户输入。
|
2天前
|
存储 Linux 数据处理
Linux中的raw命令:深入解析与实用指南
Linux的`raw`命令详解:用于直接访问硬件设备,绕过文件系统,提供高灵活性和性能。适用于数据处理,如直接复制文件或设备数据。使用时需谨慎,注意设备理解、数据备份及正确选项选择。结合其他工具可实现更多功能。示例:`raw file1 file2`复制文件,`raw -s 1024 file1 file2`跳过字节复制。
|
2天前
|
Linux 数据处理 vr&ar
Linux下的ranlib命令:静态库文件的索引生成器
`ranlib`是Linux用于加速静态库(.a文件)链接的工具,它生成索引以优化查找目标文件。当链接器处理静态库时,索引能快速定位目标,提升效率。命令如`ranlib libexample.a`创建索引。注意,新工具链可能已自动包含此功能,使用前应确保库文件未含索引,避免重复生成。
|
2天前
|
缓存 安全 Unix
深入探索Linux中的qemu-ga命令
**QEMU的qemu-ga是虚拟机内的守护进程,提供带外通道管理guest OS,如文件操作、关机、休眠等。它通过virtio-serial通信,特点是安全、高效、灵活。例如,使用`virsh qemu-agent-command`执行虚拟机内部命令。最佳实践包括安装配置agent、设置黑名单、考虑安全和性能、定期备份及利用社区资源。**
|
2天前
|
IDE Linux 数据处理
探索Linux中的`pydoc`命令:Python文档生成器的力量
`pydoc`是Linux上Python的文档生成和查看工具,尤其对数据科学家有价值。它从docstring生成模块、函数和类的文档,提供快速API参考。主要特点包括易用性、支持标准库和第三方库、跨平台。命令行示例:`pydoc pandas` 查看库文档,`pydoc numpy.array` 查看类详情,`pydoc -k 关键字` 进行搜索。使用时注意正确安装Python,编写清晰的docstring,并结合IDE以提升效率。
|
2天前
|
存储 算法 安全
深入理解Linux命令pwscore:密码质量的守护者
**pwscore命令详解:Linux密码强度评估工具** pwscore是Linux下的密码强度检查工具,分析密码长度、字符类型及避免常见模式来评分。它提供简单语法、可定制选项和高效评估。例如,`pwscore -l 12 -m alnum`评估至少含12个字符和字母数字的密码。应用时,定期评估用户密码,制定强密码策略,避免常见单词和模式,使用密码管理器,并保护输出信息安全,以增强系统安全性。