free命令-linux内存cached释放

简介:

在工作中经常会遇到Linux内存很大,却被cached占了大部分的内存空间,导致linux开始启用swap的情况。

马哥教育关于linux内存的文章,一看就懂:https://mp.weixin.qq.com/s/VoRiJpmcYZptLumuT-N-wA

下图就是这样情况:

    总内存有128G,cached占用了108G,造成系统不得不使用swap内存,而导致性能下降,速度变慢

     wKiom1nMkDHSeihvAAAYMFPk230424.png

buffer,cached的作用:

     cached主要负责缓存文件使用, 日志文件过大造成cached区内存增大把内存占用完 .
     Free中的buffer和cache:(它们都是占用内存):
     buffer : 作为buffer cache的内存,是块设备的读写缓冲区
     cache: 作为page cache的内存, 文件系统的cache
     如果 cache 的值很大,说明cache住的文件数很多。


     为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。


如何解决这个导致机器变慢的问题呢?
罪魁祸首就是内存都被cached了,free的基本没有了
所以我们应该想想如何把cached内存释放出来
重启机器肯定是可以解决,但是我们肯定是不能用这样的办法
 
释放方法有三种(系统默认值是0,释放之后你需要再改回0值):
    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

    常用方法是:echo 1 > /proc/sys/vm/drop_caches

    执行上面的命令,可以释放了大概40G的cached空间

     wKioL1nMk_myh8MHAAAYp4hcr1o225.png

经常使用rsync传输大量数据的朋友可能遇到过类似的情况:开始是传输大量文件过去,到后来传输的数据并不大,但就是很慢很慢,到对边的服务器上看会发现在终端输入命令都不会觉得慢,但看内存使用情况时,发现free的内存很少,几乎接近零了,我觉得可能就是内存都被cached了导致的
 
为什么我们要释放掉cached内存?因为我们用rsync传输大量数据的时候,linux系统将一部分文件的信息缓存在内存中,这样是可以减少频繁使用的文件的磁盘IO时间占用,当我们传完一批文件后,我们要传输另外一批文件过去,是完全不同的文件或者文件的内容发生了变化,内存中缓存的文件也不是我们需要的了,我们需要清空缓存,腾出内存用来传输下一批文件使用,这个时候我们急切的需要看到更多的内存是free状态的。
 
在这样的前提下,我们有必要自己手动清空缓存,腾出更多可用内存来
 
注意:在清空缓存前我们需要在linux系统中执行一下sync命令,将缓存中的未被写入磁盘的内容写到磁盘上

除了释放掉cached内存以外,还需要设置vm.swappiness的值,以尽大限度的使用物理内存

    查看vm.swappiness参数的值:

        #sysctl -q vm.swappiness

    临时设置vm.swappiness的值(重启后生效)

        #sysctl vm.swappiness=10

    永久设置vm.swappiness:

        echo "vm.swappiness = 10" >> /etc/sysctl.conf

本文转自激情燃烧的岁月博客51CTO博客,原文链接http://blog.51cto.com/liuzhengwei521/1969413如需转载请自行联系原作者


weilovepan520

相关文章
|
13天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
99 6
|
14天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
53 3
|
14天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
44 2
|
11天前
|
缓存 Java Linux
如何解决 Linux 系统中内存使用量耗尽的问题?
如何解决 Linux 系统中内存使用量耗尽的问题?
|
8天前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
38 3
|
11天前
|
缓存 Linux
如何检查 Linux 内存使用量是否耗尽?
何检查 Linux 内存使用量是否耗尽?
|
14天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
50 3
|
3天前
|
存储 算法 安全
深入理解Linux内核的内存管理机制
本文旨在深入探讨Linux操作系统内核的内存管理机制,包括其设计理念、实现方式以及优化策略。通过详细分析Linux内核如何处理物理内存和虚拟内存,揭示了其在高效利用系统资源方面的卓越性能。文章还讨论了内存管理中的关键概念如分页、交换空间和内存映射等,并解释了这些机制如何协同工作以提供稳定可靠的内存服务。此外,本文也探讨了最新的Linux版本中引入的一些内存管理改进,以及它们对系统性能的影响。
|
安全 Shell Linux
Linux (x86) Exploit 开发系列教程之十二 释放后使用
释放后使用 译者:飞龙 原文:Use-After-Free 预备条件: Off-By-One 漏洞(基于栈) 理解 glibc malloc VM 配置:Fedora 20(x86) 什么是释放后使用(UAF)? 继续使用已经被释放的堆内存指针叫做释放后使用。
1200 0
|
21天前
|
缓存 监控 Linux