有一种方法可以在Linux中运行命令而不缓存结果,即:
nocache cat big_file.txt
有没有办法让这个 nocache 模式自动化?就像全局设置一样。
问题:我有很多使用cp
或find
其他标准命令的供应商脚本,我不希望它们弄乱我的缓存。
答案1
我真的不建议这样做,因为这样做最终可能会造成同样的破坏。你现在实际上会强制执行更多的 IO,这很可能(取决于你的设置)最终与 mysql 争夺 IO,结果同样糟糕。
如果确实必须,请在单独的目录中为 cp/find/etc 制作包装器,然后首先将其填充到供应商脚本执行环境的 PATH 中。即
mkdir /opt/evil
echo -en "#! /bin/bash\nexec nocache /bin/cp \"\${@}\"\n" >/opt/evil/cp
chmod a+x /opt/evil/cp
# repeat for find and any other things you want to be run with nocache
export PATH=/opt/evil:${PATH}
vendor-script.sh
此外 - 如果您使用 InnoDB,IIRC 它会执行自己的进程内缓存,并且不会(严重)依赖 linux 页面缓存。
答案2
即使你不需要担心它,你也可以在需要的时候删除内存缓存文件,只需以 root 身份发出此命令即可
sync && echo 3 > /proc/sys/vm/drop_caches
这里您可以找到更多信息。
编辑:如果您按照链接回显 4,那么 linux 将完全禁用文件缓存,这正是您所寻找的。
答案3
如果我正确理解了 alphamikevictor 的链接,则在 drop_caches 中回显“4”只会禁用日志消息,而不会禁用缓存。
可以为各种命令添加 ~/.bashrc 的别名。例如:
别名 cp='nocache cp'
(假设 bash 是你的 shell。)
可以将同样的东西放入 /etc/bash.bashrc 中以影响系统上的所有 bash 用户。