Linux du 和 rsync 磁盘利用率 100%

Linux du 和 rsync 磁盘利用率 100%

每当我运行时du -shrsync我的磁盘利用率就会达到 100%。这会导致出现 mysql 慢查询,这通常会导致我的网站瘫痪。

有没有什么技巧或窍门可以以某种方式运行这些命令,以便磁盘访问的优先级保持在 Mysql 和其他核心服务上?

答案1

是的,有ionice

ionice -c 3 <pid>

其中<pid>是要减慢的进程的进程 ID。这会将此程序的 I/O 类设置为idle,这意味着当没有其他程序要求时,它将获得 IO 时间。

答案2

您可以使用ionice -c3作为命令的前缀,这样这些命令将在idleI/O 类中运行,这意味着它们只有在没有其他进程需要时才会获得 I/O 时间。不过,这要求您的系统使用 CFQ I/O 调度程序。如今,它是大多数 Linux 发行版中的默认 I/O 调度程序。

但是,这种行为通常是其他问题的征兆。您的磁盘快满了吗?这会导致有大量写入操作的系统速度变慢,因为所有内容都容易变得碎片化。或者您周围有数千万个小文件?

答案3

您的内核是否已启用 PREEMPT?有多种内核 PREEMPT 设置可以启用,以避免死机,例如在磁盘负载过重时(可能以牺牲服务器应用程序的性能为代价)。默认情况下启用多少取决于您的发行版。

在 Debian 反向移植中,现在有例如 linux-image-rt-amd64,它包含 PREEMPT_RT 实时补丁集。这个补丁集可能会提供更多帮助,但它可能有自己的问题……

运行如下命令来查看设置了什么:

# 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 设置。这些可能适用于桌面使用和/或实时使用。但这并不意味着它不能在服务器上工作。只要它们是标准发行版的一部分,它们应该会得到通常的安全修复。

答案4

此外ionice(1)rsync 可能会将 mysql 所需的块从磁盘缓存中推出。您可以使用以下方法修补 rsyncfadvise 支持以避免将 rsync 读取的内容放入缓存中。

相关内容