echo 3 > /proc/sys/vm/drop_caches
让我放弃linux的缓存.然后,不会从linux的缓存中提供对特定文件的后续请求,但是将再次从linux的缓存中提供对同一文件的进一步请求.这是因为/ proc / sys / vm / drop_caches不会禁用缓存,它只会丢弃当前缓存的内容.我可能会在每个请求之前删除缓存,但我更喜欢另一个解决方案.我还能做些什么来确保apache从磁盘加载每个请求的文件吗?
为什么我要这样做:我知道在正常操作中启用了缓存.但是服务器不提供小的和频繁访问的文件,例如html页面,小图像等.相反,它提供的文件大多数是几兆字节,来自一大堆文件.这些文件的访问非常统一,因此很少访问每个文件.因此,在正常操作中,我希望大多数访问不会导致缓存命中,但需要从磁盘加载文件.我有几个示例文件,我想使用apache的ab基准测试来测量服务器每秒可以处理的事务数.不幸的是,我相信我得到的结果因缓存而过于乐观.因此,我想禁用Linux的磁盘缓存,Apache可能会自行执行任何缓存.
更新:the answer given so far告诉我如何禁用Apache自己的缓存,但我仍然想知道是否有办法禁用Linux内核完成的缓存.
解决方法
@H_404_13@ 我不认为你可以在Linux中禁用所有磁盘缓存.作为一个黑客,您可以继续运行“sync; echo 3> / proc / sys / vm / drop_caches”来刷新几乎所有缓存在内存中的内容.从控制台
watch -n 1 `sync; echo 3 > /proc/sys/vm/drop_caches`
会做的伎俩.在上面的例子中,内核不会缓存任何超过一秒的内容,尽管它对Apache或其他进程在内存中保存的数据没有影响.它也可能不会刷新任何仍然打开且部分已锁定的内存映射文件中的内容.
如果您只想在测试运行开始时没有缓存任何内容,并且不关心它是否在测试期间缓存内容,那么您只需添加一个调用“sync”和“echo 3> / proc / sys / vm / drop_caches“在测试运行开始时.