Backup
tar gzip 降低伺服器速度
我有一個備份腳本:
- 壓縮一些文件
- 生成md5
- 將壓縮文件複製到另一台伺服器。
- 另一台伺服器完成比較 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 優先級並保持nice
CPU 優先級。
您可以嘗試使用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/*.* \