RHEL 7 下内存管理小记
一、Overview
众所周知,在 Linux 操作系统中有三个目录非常有趣好玩。
- /dev
- /run
- /proc
一个个解释下,/dev
用于对特殊设备(BTW:特殊设备可用 touch 生成)进行文件化(Store data in flat text files);/run
用于内存目录化,很有名的例子就是 radius nosql
中的内存读写持久化。其实关于 /run
我一直很好奇银行的 UNIX 是不是就利用这个技术,从而实现维护时添加足够内存待维护完毕系统再写入 SQL 中。
最后,铛铛铛。
/proc 是一个虚拟文件系统,我们可以通过对它的读写操作做为与 kernel 实体间进行通信的一种手段。
那这次我们简单讲讲 /proc/sys/vm/drop_caches
文件
二、Resolution procfs
清空 pagecache:
sync
echo 1 > /proc/sys/vm/drop_caches
或者:
sync
sysctl -w vm.drop_caches=1
清空 dentries 和 inodes:
sync
echo 2 > /proc/sys/vm/drop_caches
或者:
sync
sysctl -w vm.drop_caches=2
清空所有缓存(pagecache、dentries 和 inodes):
sync
echo 3 > /proc/sys/vm/drop_caches
或者:
sync
sysctl -w vm.drop_caches=3
三、Source
sync
手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)
sysctl
针对 /proc 进行操作的简易方法,不用再手动修改 /proc 目录(就好比 windows 中组策略与注册表的区别,当然啦 Linux 并没有注册表的概念)。BTW:即便使用 sysctl -w 命令进行操作,重启后会依然会失效。若希望持久保存应写入 /etc/sysctl.conf 文件,还可以使用 sysctl -p 立即运行生效。
当发生内存不足、应用获取不到可用内存、OOM错误等问题时,还是更应该去分析应用方面的原因,如用户量太大导致内存不足、发生应用内存溢出等情况,否则,清空buffer,强制腾出free的大小,可能只是把问题给暂时屏蔽了。——摘自:linuxの飘扬