我正在做什么:
我已经在我的服务器上安装了 Windows 共享,并且每隔五分钟我就会使用以下命令将 1.5GB 的文件移动到该共享中:
nocache -n 4 rsync -a -W --bwlimit=20000 /mnt/share /file/location
我已经阅读了各种关于 nocache 应该做什么的内容,但最终,它基本上完全填满了缓存的内存并开始强制交换,这会减慢我的服务器速度。
我尝试过 nocache -n 2,使用默认值,不使用默认值,不使用 -W 标签,但最终结果基本相同。我无法找到清晰的解释,说明为什么有人想要使用 -n,或者应该使用哪些限制,因为从有限的阅读来看,它所做的只是强制 posix_fadvise 被调用 -n 次,然后才能完成。
参考: https://github.com/Feh/nocache/blob/master/README
请注意,我们必须在我们的服务器上构建 nocache,并且我们不是这方面的专家,所以它可能无法按预期工作,但我不确定如何测试它在我们的服务器上是否正常工作。
编辑1: @布莱恩对!我忘了,最初我让另一台计算机通过共享将文件放到服务器上,但这样会占用两个硬盘的最大带宽,我无法有效地找到一种方法让 Windows 服务器不使用所有带宽复制文件,即使使用 robocopy 和带宽标志或类似的东西。这导致两台计算机上的所有内容基本上都锁定了 10 秒(糟糕)。
因此,我转到服务器上的 rsync 设置,以相反的方式执行此操作,让服务器使用带有 bwlimit 的 rsync 从 Windows 机器中提取文件,这仍然会降低服务器速度,但不会锁定任何东西。
我曾尝试将 nice -n 20 与 rsync 结合使用,但由于它与 nocache 配合不佳而未能使用,但我会研究 ionice,尽管我不确定这是否是我想要的。
@安德鲁 我正在尝试解决每五分钟 rsync 将我的 3-4GB 可用内存降至 100MB 的问题,然后当其他 cron 作业/开发恰好需要内存时才释放 1-2GB。我还会研究 dd,只要系统在使用直接 IO 时仍能让其他一切顺利运行。