我推出了一些占用大量内存的东西,现在一切都滞后了很多。我猜想所有应用程序的内存都已交换,以便为内存密集型进程释放一些空间,现在所有内容在访问时都慢慢返回到 RAM。
有没有办法明确地将所有可能的东西从交换移回 RAM?或者也许不是一切,而只是一些特定的过程数据?
我有一个具有 8GB 内存的网络服务器,并且正在运行一个非常密集的 php 站点(1 个站点),该站点可以进行文件操作、绘图、电子邮件、论坛,等等。环境远非静态,这让我相信在 ram 中缓存任何东西几乎没有什么好处,因为几乎每个对服务器的请求都会创建新的或更新的页面。很多缓存是在客户端完成的,所以当涉及到图像、javascript、css 时,我们有大量的 304 请求。
此外,我确实有语言文件被写入服务器上的平面文件,其中缓存的 ram 绝对是好的,而不是从磁盘读取。但是这样的文件屈指可数。
在大约两周内,我从拥有 98% 的空闲内存变成了 4% 的空闲内存。这发生在我们还将几个大型 svn 更新推送到服务器的时候。
我的问题是,如果我使用以下命令定期清除缓存(我知道 Linus Torvalds 对缓存的感觉),我的服务器是否会得到更好的调整:
sync; echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
或者我最好编辑以下文件:
/proc/sys/vm/swappiness
Run Code Online (Sandbox Code Playgroud)
如果我用 30 替换默认值 60,我应该有更少的交换和更多的陈旧缓存重用。
看到使用第一个命令释放所有缓存确实感觉很好,但如果我告诉你这对桌面环境有好处,那我就是在骗你。但是像我上面描述的那样的网络服务器呢?想法?
编辑:我知道系统将根据需要从缓存中获取内存,但感谢您指出我们的清晰。当大部分服务器内存存储在缓存中时 Apache 会变慢,我是否在想象事情?那是完全不同的问题吗?