Linux 上如何清除 RAM 内存高速缓存,缓存和交换空间
一、在Linux中如何清除缓存?
每一个Linux系统有三个选项来清除缓存而不中断任何进程或服务。
1,仅清除缓存页
sync; echo 1 > /proc/sys/vm/drop_caches
2,清除目录项和inodes
sync; echo 2 > /proc/sys/vm/drop_caches
3,清除,缓存页,目录项和inodes
sync; echo 3 > /proc/sys/vm/drop_caches
上述命令的说明:
①sync将刷新文件系统缓存,命令通过";"
分隔,顺序执行,shell等待终止在序列中的每一个命令执行之前。正如内核文档中提到的,写到drop_cache
将清空缓存而不杀死任何应用程序/服务,echo
命令做写入文件的工作。
②如果你必须清除磁盘高速缓存,第一个命令在企业和生产环境中是最安全,"…echo 1> …"
只会清除页缓存。
③不建议使用上面第三个选项在生产环境中"…echo 3 >"
,除非你明确自己在做什么,因为它会清除缓存页,目录项和inodes。
二、在Linux上释放Buffer和Cache要用到内核是否是个好主意?
当你请求许多设定想要检查时,如果它实际上是专门实施对 I/O
广泛的基准测试,那么你可能需要清除缓存。你可以如上所示删除缓存,无需重新启动系统即无需停机。
Linux被设计成它在寻找磁盘之前到磁盘缓存寻找的方式。如果它发现该资源在缓存中,则该请求不到达磁盘。如果我们清理缓存,磁盘缓存将没有用处,系统会到磁盘上寻找资源。
此外,当清除缓存后它也将减慢系统运行速度,系统会重新加载每一个被请求的资源再次到磁盘缓存中。
现在,我们将通过一个cron任务调度器创建一个shell脚本在每天下午2点自动清除RAM缓存。
1、创建一个shell脚本clearcache.sh并在其中添加以下行
#!/bin/bash
# scrtipt_name: clearcache.sh
# 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
现在,当你需要清除RAM缓存时只需要调用脚本。
现在设置一个定时任务来清除RAM缓存每天在下午2点,打开crontab进行编辑。
# crontab -e
添加以下行,保存并退出。
0 3 * * * /path/to/clearcache.sh
2、在生产环境的服务器上自动清除RAM是否是一个好主意?
不!它不是
。想想一个情况,当你已经预定脚本来清除RAM缓存每天在下午2点。每天下午2点该脚本会执行并刷新你的RAM缓存。在一天中的任何时候,您网站用户的在线量可能会超过预期的,并从你的服务器请求资源。同时调度器运行着脚本,并在高速缓存中清除一切。当所有的用户都从磁盘读取数据时,这将导致服务器崩溃并损坏数据库
。
因此,清除缓存仅在必要时并且在你的预料之中,否则你就是个Cargo Cult System Administrator
。
三、如何清除Linux的交换空间
如果你想清除交换空间,你可以运行下面的命令:
# swapoff -a && swapon -a
此外,了解有关风险后,您可能会将上面的命令添加到cron中。
现在,我们将上面两种命令结合成一个命令写出正确的脚本来同时清除RAM缓存和交换空间。
# echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'
或
su -c 'echo 3 >/proc/sys/vm/drop_caches' && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'
或
sudo sh -c 'echo 3 >/proc/sys/vm/drop_caches' && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'
在测试上面的命令之前,我们先运行"free -m"
然后执行脚本检查缓存。
Linux 上如何清除 RAM 内存高速缓存,缓存和交换空间相关推荐
- 理解JVM如何使用Windows和Linux上的本机内存
转至:http://www.chineselinuxuniversity.net/articles/23291.shtml 摘要:Java™ 堆耗尽并不是造成 java.lang.OutOfMemor ...
- 理解 JVM 如何使用 Windows 和 Linux 上的本机内存
http://www.ibm.com/developerworks/cn/java/j-nativememory-linux/ Java 堆(每个 Java 对象在其中分配)是您在编写 Java 应用 ...
- 内存详解-理解 JVM 如何使用 Windows 和 Linux 上的本机内存
内存详解 理解 JVM 如何使用 Windows 和 Linux 上的本机内存 Java™ 堆耗尽并不是造成 java.lang.OutOfMemoryError 的惟一原因.如果本机内存 耗尽,则会 ...
- JAVA 内存详解 (理解 JVM 如何使用 Windows 和 Linux 上的本机内存)
级别: 中级 Andrew Hall , 软件工程师, IBM 2009 年 5 月 11 日 Java™ 堆耗尽并不是造成 java.lang.OutOfMemoryError 的惟一原因.如果本机 ...
- 如何在Windows 10上手动清除或禁用Chrome缓存
通常,Chrome浏览器会将您浏览过的网页存储到计算机中.这样的文件,我们称为缓存.当您再次访问某个网站两次时,Google Chrome浏览器总是从缓存中提取原始内容,而不是从Internet下载. ...
- composer安装fxp插件时候提示内存不足且没有交换空间的解决办法
出现的错误如下所示: The following exception is caused by a lack of memory or swap, or not having swap configu ...
- jvm在windows和linux,理解JVM如何使用Windows和Linux上的本机内存
欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入 Java 运行时如何使用本机内存 Java 运行时是一个操作系统进程,它会受到我在上一节中列出的硬件和操作系统局限性的限制. ...
- linux关闭磁盘缓存,在linux上禁用apache2的所有磁盘缓存
出于基准测试目的,我想强制Apache 2从磁盘加载每个请求的文件,而不是从内存中的缓存加载它.从我所读到的做同步后跟 echo 3 > /proc/sys/vm/drop_caches 让我放 ...
- Linux上跑程序加大内存
一个shell 命令 加内存方法 Java -Xms768m -Xmx768m -XX:PermSize=128m -classpath .:$lib........................ ...
- linux删除某个用户的共享内存,删除Linux上的所有共享内存和信号量
除了bvamos的回答,根据该文档中使用的sem被弃用: NAME再用ipcrm - 删除一个消息队列,信号量设定或共享存储器ID 概要再用ipcrm [-M键| -m id | -Q键| -q id ...
最新文章
- 关于jsb中js与c++的相互调用
- mysql扩展中如何处理结果集_我们如何处理MySQL存储过程中的结果集?
- 结构型模式---适配器模式
- ES更新嵌套数组(使用Java API)
- c语言程序输入n个数字排序,输入n个数字然后进行排序,用C语言编写。注意是n个数啊,不是确定的个数。...
- PuppeteerSharp: 更友好的 Headless Chrome C# API
- 震惊!程序员要放弃 Python 了!?发生了啥?
- Android Handler的内存泄露场景分析
- 电子工程 计算机科学,计算机科学、计算机工程和电子工程有啥区别
- mysql limit锁_mysql中limit的用法
- js获取日期选择器值html,利用Query+bootstrap和js两种方式实现日期选择器
- Axure9(基础二)
- 常用颜色名称与RGB数值对照表
- C程序~一元二次方程求解
- IP地址和服务器之间的联系,都了解吗?
- 安装Redis使用make命令出现make /bin/sh: cc: 未找到命令 make[1]: 离开目录“/usr/local/mytools/redis-5.0.0/src“
- android studio 导出 aar,Android Studio 导出 .aar包的操作流程
- 70个经典的 Shell 脚本
- element ui table实现考勤排班表
- php中简单模糊查询的sql语句