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
相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
14天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
103 6
|
15天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
57 3
|
15天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
46 2
|
23天前
|
缓存 监控 Linux
|
26天前
|
Linux Shell 数据安全/隐私保护
|
27天前
|
域名解析 网络协议 安全
|
10天前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
40 3
|
2月前
|
运维 监控 网络协议
|
2月前
|
监控 Linux Shell
|
15天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
52 3