如何在Linux上清理内存缓存、缓冲与交换空间

与其他类型的操作系统一样,GNU/Linux已经有效的实现了内存管理,甚至更加优秀。但是如果任何进程正在吃光你的内存,并且你想清理它,Linux提供了一种刷新或清除内存缓存的方法。

如何在Linux中清除缓存?

每个Linux系统都有三个选项可以在不中断任何进程或服务的情况下清除缓存。

1 只清除页面缓存(pagecache)

# sync; echo 1 > /proc/sys/vm/drop_caches

2 清除目录项和inode

# sync; echo 2 > /proc/sys/vm/drop_caches

3 清除页面缓存、目录项和i节点

# sync; echo 3 > /proc/sys/vm/drop_caches

上述命令的解释

sync命令将刷新文件系统缓冲区。分号(;)分隔的命令依次执行。在执行序列中的下一个命令之前,shell等待每个命令终止。如内核文档中提到的,写入drop_cache将清除缓存而不会终止任何应用程序或服务。echo命令正在做的任务就是写入文件。

如果你必须清除磁盘缓存,在企业和生产环境中第一个命令(“...echo 1>...”)是最安全的,它将仅仅只清除页面缓存。生产环境中不推荐使用上述第三个选项("...echo 3 >..."),直到你知道你正在做什么。因为它会清除页面缓存,目录项和i节点。

在Linux中释放可能被Linux内核使用的缓冲区和缓存是一个好主意吗?

当你正应用各种设定并想检查时,如果它实际上是专门在I / O扩展基准测试上实现的,那么你可能需要清除缓冲区缓存。你可以按照上面解释的方式删除缓存而无需重启操作系统,即无需停机。

Linux被设计成这样一种方式,它在查看磁盘之前先查看磁盘缓存。如果它发现资源在缓存中,然后相应的请求不会去到磁盘。如果我们清理了缓存,磁盘缓存将没有那么有用,因为操作系统将在磁盘上查找资源。

更进一步说当缓存被清理它会使系统减速几秒钟,同时操作系统所需的所有资源将再次加载到磁盘缓存中。

现在我们将编写一个shell脚本,通过计划任务在每天凌晨的2点来自动清除内存缓存。编写一个名为clearcache.sh的脚本,添加以下内容:

#!/bin/bash
# Note, we are using "echo 3", but it is not recommended in production instead use "echo 1"
echo "echo 3 > /proc/sys/vm/drop_caches"

给clearcache.sh脚本赋予执行权限

# chmod 755 clearcache.sh

现在,你可以在任何你被请求清除内存缓存的时候调用该脚本。

现在,设定一个每个凌晨2点清除缓存的计划任务。打开crontab进行编辑。

# crontab -e

追加下面的行,保存并退出,使脚本在每天凌晨2点运行。

0  2  *  *  *  /path/to/clearcache.sh

在生产服务器上清理内存缓存是个好主意吗?

不,它不是。考虑这样一种情形,当你已经计划了该脚本在每天的凌晨2点自动清理缓存。每天凌晨2点脚本将被执行,它新刷你的内存缓存。某天,无论出于某种原因,也许是超出预期的用户在线访问你的网站并在你的服务器寻求资源。

与些同时计划任务脚本执行并清除了缓存中的所有东西。现在,所有的用户将从硬盘获取数据。这将导致服务器崩溃和损坏数据库。因此,仅在需要的时候清除内存缓存并且知道你正在做什么 ,否则你就是一个货物崇拜的管理员。(参考货物崇拜编程解释: 这个名词有时也指不熟练的或没经验的程序员从某处拷贝代码到另一处,却并未深入了解其代码是如何工作的,或者不清楚在新的地方是否需要这段代码。也可以指不正确或过份的应用设计模式、代码风格或编程方法,却不清楚其原理。)

如何在Linux中清除交换空间?

如果你想清除交换空间,你可以执行以下命令。

# swapoff -a && swapon -a

在了解了所有相关风险以后,你也可以增加上述的命令到clearcache.sh计划任务脚本。

现在我们将通过把上述两条命令组合到一起来生成一条合适的脚本,以清除内存缓存和交换空间。

# echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'
OR
$ su -c "echo 3 >'/proc/sys/vm/drop_caches' && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'" root

测试以上两条命令以后,在执行上述脚本的前后我们将通过运行“free -h”命令来检查缓存。

到此为止,如果你喜欢这篇文章,别忘记在评论区提供有价值的反馈让我们知道。在生产和企业环境中你认为还有哪些好主意来清除内存缓存和缓冲区。

原文地址:https://www.tecmint.com/clear-ram-memory-cache-buffer-and-swap-space-on-linux/

如何在Linux上清理内存缓存、缓冲与交换空间的更多相关文章

  1. Linux下清理内存和Cache方法见下文:

    暂时目前的环境处理方法比较简单: 在root用户下添加计划任务: */10 * * * * sync;echo 3 > /proc/sys/vm/drop_caches; 每十分钟执行一次,先将 ...

  2. Linux下清理内存和Cache方法

    暂时目前的环境处理方法比较简单: 在root用户下添加计划任务: */10 * * * * sync;echo 3 > /proc/sys/vm/drop_caches; 每十分钟执行一次,先将 ...

  3. .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存

    注:支持 .NET Core 的 memcached 客户端 EnyimMemcachedCore 的 NuGet 包下载地址:https://www.nuget.org/packages/Enyim ...

  4. Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches

    Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches 频繁的文件访问会导致系统的Cache使用量大增 $ free -m total used free shared ...

  5. [转帖]如何在Linux上使用命令行查看硬件信息

    如何在Linux上使用命令行查看硬件信息 时间:2016-01-13   作者:admin 分类:新手入门 阅读:126次 http://embeddedlinux.org.cn/emb-linux/ ...

  6. 如何在Linux上通过grub添加内核参数

    转自Linux中国 我们可以在linux内核启动时为其提供各种各样的参数.这些参数可以自定义内核默认的行为,或者通知内核关于硬件的配置信息.内核参数应在内核启动时通过引导装载程序,如GRUB或LILO ...

  7. 如何在Linux上使用VIM进行.Net Core开发

    对于在Linux上开发.Net Core的程序员来说, 似乎都缺少一个好的IDE. Windows上有Visual Studio, Mac上有Visual Studio for Mac, 难道Linu ...

  8. 如何在 Linux 上复制文件/文件夹到远程系统?

    从一个服务器复制文件到另一个服务器,或者从本地到远程复制是 Linux 管理员的日常任务之一. 我觉得不会有人不同意,因为无论在哪里这都是你的日常操作之一.有很多办法都能处理这个任务,我们试着加以概括 ...

  9. springboot打成的jar包如何在Linux上持久运行

    一.首先说说在没有springboot的时候,项目是如何部署的? 1.动态web项目 动态web项目部署很方便,基本上上传文件到服务器的tomcat里面的webapps文件夹下即可完成部署.当然了,这 ...

随机推荐

  1. JAVA多线程之CountDownLatch与join的区别

    首先,我们来看一个应用场景1: 假设一条流水线上有三个工作者:worker0,worker1,worker2.有一个任务的完成需要他们三者协作完成,worker2可以开始这个任务的前提是worker0 ...

  2. 使用Sitecore的可视化路径分析器工具洞察客户360度行为

    Path Analyzer背后的想法是观察,分析和理解您的潜在客户和客户在浏览您的网站时所遵循的网络旅程.他们最初来自哪里?他们的路径是“有机”(通过搜索引擎)还是来自付费广告?社交帖子?甚至是你发起 ...

  3. Java复制目录/子目录/文件

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  4. Applet程序组件与AJAX技术

    Applet 定义 Applet是一种运行于Web客户端环境下的Java程序组件. 工作原理 Applet以代码的形式嵌入Web页面中,用标签<applet></applet> ...

  5. 雾霾天出行,如何精确避开“雷区”?2016 SODA数据侠十强

    (2016年参加了上海 SODA 竞赛,进入前十,最终获得上海市的两个奖项.) ▍跟踪雾霾,仅靠零星的监测点数据怎么行? 如果雾霾短期内没有办法彻底根治,我们可以做什么,把环境污染物对人的影响尽可能降 ...

  6. java并发之线程间通信

    1.volatile 关键字 java 支持多个线程同时访问一个对象或对象的成员变量,而每个线程拥有这个变量的拷贝,虽然对象或成员变量分配的内存在共享内存,但每个执行的线程可以拥有一份拷贝,可以提高程 ...

  7. PHP XAMPP windows环境安装扩展redis 致命错误: Class 'Redis' not found解决方法

    PHP XAMPP windows环境安装扩展redis 致命错误: Class 'Redis' not found解决方法 1.电脑需要先安装redis服务端环境,并在安装目录下打开客户端redis ...

  8. 利用ueditor保存到mysql数据库时出现乱码

    首先反复检查页面的字符编码,发现使用的都是 utf-8,再次检查数据库编码格式也用的是UTF-8.用format函数进行格式化,还是不起作用,最用把出现乱码的字段的数据类型由BLOB改成MEDIUMT ...

  9. jquery改变字符串中部分字符的颜色

    //该方法改变字符串中中括号内(包括中括号)的字符串颜色为红色function changecolocer() { var zf = $('#YWFA').text(); if(zf.length&g ...

  10. 19 中山重现赛 1002 triangle

    题意:给一组数据a[0]...a[n],  n<5e6, a[i]<2^31-1(1e9)判断是否存在三角形数 首先想到的是排序,若a[i]+a[i+1]>a[i+2] , 则存在三 ...