每当我运行du -sh或rsync我的磁盘利用率都达到了100%。 这会导致mysql缓慢的查询出现,这通常会导致我的网站closures。
任何提示或技巧运行这些命令以某种方式,所以磁盘访问的优先级保持与MySQL和其他核心服务?
是的,用ionice :
ionice -c 3 <pid>
其中<pid>是要减慢进程的进程ID。 这将把这个程序的I / O类设置为idle ,这意味着当没有别的东西要求的时候它会得到IO时间。
您可以使用ionice -c3作为命令的前缀,这样这些命令将在idle I / O类中运行,这意味着只有在没有其他进程需要它时才会获得I / O时间。 这需要您的系统使用CFQ I / O调度程序。 这是目前大多数Linux发行版的默认I / O调度程序。
然而,这种行为往往是其他事情的performance。 你的磁盘快满了吗? 这会导致有很多写入的系统变慢,因为一切都趋于分散。 或者你有几千万个小文件?
你有没有打开PREEMPT的内核? 有各种内核PREEMPT设置可以打开,这将避免locking,如在繁重的磁盘加载(也许在性能的服务器应用程序的一些代价)。 这取决于你的分配默认打开多less。
在Debian的backports中,现在有例如包含PREEMPT_RT实时补丁集的linux-image-rt-amd64。 这个补丁集可能会帮助更多,但它可能有它自己的问题…
运行这样的东西,看看是什么设置:
# grep PREEMPT /boot/config-2.6.32-5-amd64 <-- in case of a Debian stable amd64 kernel
结果:
# CONFIG_TREE_PREEMPT_RCU is not set CONFIG_PREEMPT_NOTIFIERS=y # CONFIG_PREEMPT_NONE is not set CONFIG_PREEMPT_VOLUNTARY=y # CONFIG_PREEMPT is not set
你可能希望把它设置成更积极的东西。 仔细看看内核源代码的内核文档,看看有什么适合你的。 并检查你的发行版提供了哪些内核,可能会有更积极的PREEMPT设置。 这些可能意味着桌面使用和/或实时使用。 但这并不意味着它不能在服务器上工作。 只要他们是标准发行版的一部分,那些应该得到通常的安全修复程序。
除了ionice(1)之外, rsync可能会将MySQL所需的块从磁盘caching中推出。 你可以用fadvise支持来修补rsync,以避免rsync读取的东西进入caching。