Linux 清空缓存命令

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会情况脏页吗?

先说答案,不会的。

看官方这段描述。

Linux 清空缓存命令

让我用蹩脚的英语翻译下吧:  不是毁灭性的操作,也不会释放脏页。如果想释放更多, 先执行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

 

今天的文章Linux 清空缓存命令分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/65453.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注