..

为什么我无法清理服务器的 buff/cache

有一位网友的服务器,偶尔出现服务器无法 ssh 登录的情况,排查发现是 buff/cache 占用过多导致。于是希望通过清空 buff/cache 来解决问题。他使用如下的命令清空 buff/cache:

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

执行以后发现用处不大,buff/cache 还是占用大量的内存,并没有释放多少内存。 [free]

我看他的这条命令,好像也没什么问题啊,为什么 buff/cache 还是占用大量内存呢?仔细一年发现 echo 3 后面少了一个空格,导致命令执行以后没有生效。

在 bash 中, command 1> file 表示将 command 的标准输出重定向到 file 中,而 command 1>file 和 command > file 是等价的。 commanb 2> file 表示将 command 的标准错误输出重定向到 file 中。command 3> file 表示将文件描述符 3 的输出重定向到 file 中。但是这里没有文件描述符为 3 的输出,所以 command 3>file 后,file 文件的内容为空。也就是说明 echo 3> /proc/sys/vm/drop_caches 命令并没有任何内容写入到 /proc/sys/vm/drop_caches 。

因此真正要执行的命令是:

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

而不是

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

只是差了一个空格而已,导致命令没有生效。