清理系统缓存
当服务器内存使用率高达90%以上时,且有较大耗内存操作时,可以考虑把系统的垃圾内存清理掉。方法如下
echo 3 > /proc/sys/vm/drop_caches
~ # free
total used free shared buffers
Mem: 155728 119840 35888 176 28
-/+ buffers: 119812 35916
Swap: 0 0 0
~ # echo 3 > /proc/sys/vm/drop_caches
~ # free
total used free shared buffers
Mem: 155728 65828 89900 176 0
-/+ buffers: 65828 89900
Swap: 0 0 0
-----------------------------------------------------------
哪里有过大?cached 和 buffers 占据 available 部分中的绝大部分是正常的。你说你的内存,free 着就是什么用处都没有,但你以为那些部分就不需要通电、刷新吗?
cached 通常属于 available 部分(该数据 3.14 内核之后提供,procps-ng 较新版本也显示),也就是可用内存。什么时候程序需要了,什么时候拿去用。暂时不需要?那我从磁盘那个慢到死的家伙里好不容易读出来的数据先留着,指不定用户还要用到呢。
有兴趣可以 echo 3 到那什么文件/proc/sys/vm/drop_caches
清空一下这些部分,然后 ls /usr/lib 试试。然后立即再执行一次,是不是有缓存之后就快多了?
至于 sync 命令。它和 cached 有关,但是不是你所想的那个功能。它的功能是,把脏页写回磁盘,也就是把修改过的数据还没写到磁盘的数据写到磁盘上。因为内核会延迟提交,每次提交多积累一些数据,以提高效率、降低延迟。没有使用的必要,只会让系统卡一下而已。