前面都是我的牢骚,想看正文的请走传送门

起因

  今天跑了一下 WordPress 的站点健康,发现有个名叫 fileinfo 的 extension 没启用。我去宝塔面板里面装上了 fileinfo 之后发现它(站点健康)还是提示没有安装 fileinfo ,去宝塔论坛也没查到什么有用的消息,就去 bing 上搜。发现有的文章说是内存不够,调一下 swap ,即 Linux 下的虚拟内存。

  不调不知道,一调吓一跳,原本物理内存 40% 的占用一下子飙升到了 80% 左右。于是就有了本文。

方案

  切记缓存不要随意清空,清空 cache 命令最好在低负载时使用,不然可能会导致系统运行出问题!

  释放内存的时候,首先进入 root 执行命令 sync 将所有正在内存中的缓冲区写到磁盘中,其中包括已经修改的文件 inode、已延迟的块 I/O 以及读写映射文件,从而确保文件系统的完整性。sync 命令可以多执行几遍。

root@VM-8-5-ubuntu:/# sync

  然后修改 drop_caches 文件:

root@VM-8-5-ubuntu:/# echo 3 > /proc/sys/vm/drop_caches

  drop_caches 的值可以是 0-3 之间的数字,代表不同的含义:

  • 0:不释放(系统默认值);默认情况下表示不释放内存,由操作系统自动管理;
  • 1:释放页缓存;To free pagecache.
  • 2:释放dentries和inodes;To free dentries and inodes.
  • 3:释放所有缓存;To free pagecache, dentries and inodes.

  建议释放完之后改回 0,交给操作系统管理。上面是临时释放缓存的方法,要想永久释放缓存,需要在 /etc/sysctl.conf 文件中配置如下,然后 sysctl -p生效即可。

vm.drop_caches=1/2/3

  注:在 2.6.x 系列的内核中可以设置为 0,3 系列的内核中设置为 0 就会报错,write error: Invalid argument。只能重启服务器恢复。