Backup

tar gzip 降低伺服器速度

  • June 30, 2012

我有一個備份腳本:

  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 常式中獲得了 90% 的 CPU,從而降低了生產伺服器的速度。我試圖添加一個nice -n 15但伺服器仍然掛起。

我已經閱讀了1,但談話對我沒有幫助。

解決此問題的最佳方法是什麼?我對新的架構/解決方案持開放態度:)

如果使用 nice,則更改優先級,但這只有在 CPU 使用率接近 100% 時才會產生明顯影響。

在您的情況下,伺服器變慢不是因為 CPU 使用率,而是因為儲存上的 I/O。用於ionice更改 I/O 優先級並保持niceCPU 優先級。

您可以嘗試使用chrt將 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/*.* \

引用自:https://serverfault.com/questions/403538