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
目录
相关文章
|
3月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
二、Linux文本处理与文件操作核心命令
|
3月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
318 137
|
3月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
726 57
|
6月前
|
JSON 自然语言处理 Linux
linux命令—tree
tree是一款强大的Linux命令行工具,用于以树状结构递归展示目录和文件,直观呈现层级关系。支持多种功能,如过滤、排序、权限显示及格式化输出等。安装方法因系统而异常用场景包括:基础用法(显示当前或指定目录结构)、核心参数应用(如层级控制-L、隐藏文件显示-a、完整路径输出-f)以及进阶操作(如磁盘空间分析--du、结合grep过滤内容、生成JSON格式列表-J等)。此外,还可生成网站目录结构图并导出为HTML文件。注意事项:使用Tab键补全路径避免错误;超大目录建议限制遍历层数;脚本中推荐禁用统计信息以优化性能。更多详情可查阅手册mantree。
554 143
linux命令—tree
|
2月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
494 2
|
3月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
326 0
Linux内存问题排查命令详解
|
3月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
307 16
|
4月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
1629 10
|
5月前
|
监控 Linux 网络安全
Linux命令大全:从入门到精通
日常使用的linux命令整理
878 13
|
6月前
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
1071 21