参见英文答案 >
Why drop caches in Linux?13个
我有一个8GB内存的网络服务器,并运行一个非常密集的PHP网站(1个网站),它可以进行文件操作,绘图,电子邮件,论坛等等.环境远非静态,这让我相信,在ram中缓存任何东西都可以获得很少的东西,因为几乎每个对服务器的请求都会创建新的或更新的页面.并且很多缓存都是在客户端完成的,所以当涉及到图像,javascript,css时,我们有大量的304请求.
我有一个8GB内存的网络服务器,并运行一个非常密集的PHP网站(1个网站),它可以进行文件操作,绘图,电子邮件,论坛等等.环境远非静态,这让我相信,在ram中缓存任何东西都可以获得很少的东西,因为几乎每个对服务器的请求都会创建新的或更新的页面.并且很多缓存都是在客户端完成的,所以当涉及到图像,javascript,css时,我们有大量的304请求.
另外,我确实有语言文件写入服务器上的平面文件,其中缓存的ram肯定是好的而不是从磁盘读取.但是只有少数像这样的文件.
在大约两周的时间里,我已经从拥有98%的免费公羊变成了4%的免费公羊.这发生在我们还将几个大的svn更新推送到服务器上的时间.
我的问题是,如果我使用以下命令定期清除缓存(我知道Linus Torvalds对缓存的感觉)是否会更好地调整我的服务器:
sync; echo 3 > /proc/sys/vm/drop_caches
或者我会更好地编辑以下文件:
/proc/sys/vm/swappiness
如果我用30替换默认值60,那么我应该更少地进行交换,并且可以更多地重用过时的缓存.
看到使用第一个命令释放所有缓存确实感觉很好,但如果我告诉你这对桌面环境有好处,我就会骗你.但是我上面描述过的Web服务器呢?思考?
编辑:我知道系统将从缓存中获取内存,但感谢指出我们的清晰度.当大多数服务器内存存储在缓存中时Apache是否会减速?这是一个完全不同的问题吗?
解决方法
清除缓存会阻碍性能,而不是帮助.如果其他东西需要RAM,那么它将由其他东西使用,所以你所做的就是在执行clear之后暂时降低缓存命中/未命中率.
如果缓存中的数据非常过时(即在异常操作期间缓存的内容),则会根据需要将其替换为“更新”的数据,而无需人工清除它.
运行同步的唯一原因; echo 3> / proc / sys / vm / drop_caches通常是你要尝试做一些I / O性能测试并希望从一个已知状态开始(在运行之间运行缓存丢弃以减少由于缓存被启动而导致的结果差异每次运行都不同).
内核有时会交换几页,即使它有足够的RAM可以从缓存/缓冲区中声明回来,如果你发现它是服务器的问题,调整swappiness设置可能会停止.您可能会从中看到一个小的好处,但可能会通过人工清除缓存缓冲区来看到临时性能下降.