Linux 默认的内存管理会自动释放内存的 cache memory。跟 Windows 不同, Linux 开启一段时间后, 即使关闭了一些 process, 用 top 或 free 指令查看内存的使用状况时, 都是只剩下不足 1% 的可用空间, 实际上只是 cache memory 占用了内存空间, 而 Kernel 会在 process 需要使用内存时, 自动释放 cache 所占用的内存。
其实这样系统一直运行并没有问题, 但如果想手动释放 cache memory, 可以通过修改档案 /proc/sys/vm/drop_caches 实现, 系统默认值是 0 , 即不会强制释放:
# cat /proc/sys/vm/drop_caches
0
0
除了默认的 0 设定外, 分别可以设定成 1, 2 及 3, 它们的意思是:
设定成 1, 释放 page cache:
# sh -c “sync; echo 3 > /proc/sys/vm/drop_caches”
设定成 2, 释放 dentries 与 inodes:
# sh -c “sync; echo 3 > /proc/sys/vm/drop_caches”
设定成 3, 释放所有 cache, 包括 pagecache、dentries 及 inodes:
# sh -c “sync; echo 3 > /proc/sys/vm/drop_caches”
上面的做法可以通过手动输入指令释放内存, 如果想定期自动释放, 可以建立一个 shell script, 配合 crontab 实现。
首先建立一个 shell script, 以下假设 shell script 名为 cacheclear.sh, 并放在 /root/ 目录下, 用作自动释放内存, 内容如下:
|
1 2 3 |
#!/bin/sh sh -c "sync; echo 3 > /proc/sys/vm/drop_caches" |
储存后离开编辑器, 将档案加入可执行权限:
# chmod +x cacheclear.sh
加入 crontab:
# crontab -e
加入以下一行在最后:
|
1 |
0 * * * * /root/cacheclear.sh |
储存后, crontab 就会每个小时 0 分自动释放内存。