tar gzip 减慢服务器速度

tar gzip 减慢服务器速度

我有一个备份脚本:

  1. 压缩一些文件
  2. 生成 md5
  3. 将压缩文件复制到另一台服务器。
  4. 另一台服务器完成MD5比较(以查找复制错误)。

这是核心脚本:

nice -n 15 tar -czvf $BKP $PATH_BKP/*.* \
| xargs -I '{}' sh -c "test -f '{}' && md5sum '{}'" \
| tee $MD5
scp -l 80000 $BKP $SCP_BKP
scp $MD5 $SCP_BKP

此例程在 gzip 例程中 CPU 占用率达到 90%,导致生产服务器速度变慢。我尝试添加,nice -n 15但服务器仍然挂起。

我已经读过了1但谈话并没有帮助我。

解决这个问题的最佳方法是什么?我愿意接受新的架构/解决方案:)

答案1

如果您使用 nice,您可以改变优先级,但这只有在 CPU 使用率接近 100% 时才会产生明显的影响。

就您的情况而言,服务器变慢不是因为 CPU 使用率,而是因为存储上的 I/O。使用ionice更改 I/O 优先级并保持niceCPU 优先级。

答案2

您可以尝试使用查特将tar程序的调度策略改为SCHED_BATCH。

根据手册页sched_setscheduler(2)

SCHED_BATCH:调度批处理进程(自 Linux 2.6.16 起)。SCHED_BATCH 只能在静态优先级 0 时使用。此策略类似于 SCHED_OTHER,因为它根据进程的动态优先级(基于 nice 值)来调度进程。不同之处在于,此策略将导致调度程序始终假设该进程占用大量 CPU。因此,调度程序将针对唤醒行为应用较小的调度惩罚,因此该进程在调度决策中略微处于不利地位。

   This policy is useful for workloads that are noninteractive, but do not
   want to lower their nice value, and for workloads that want a determin‐
   istic scheduling policy without interactivity causing extra preemptions
   (between the workload's tasks).

如果你仍然不走运,你可以尝试 SCHED_IDLE。这将使该程序仅在没有其他程序可运行时才被唤醒。

这将批处理中的 tar 行更改为如下形式:

nice -n 15 chrt -b tar -czvf $BKP $PATH_BKP/*.* \

答案3

您是否尝试过使用而不是 gzip?

相关内容