使用 tar/gzip cron 脚本的良好调度优先级

使用 tar/gzip cron 脚本的良好调度优先级

我进行大型备份,使用时会给我的服务器带来巨大负担tar/gzip。我已将任务设置为 cronjob,它访问处理备份的脚本。我知道这nice可能在这种情况下有所帮助,但我不太确定正确的使用方法。

我的脚本中有以下命令:

tar -cf 
gzip -9 

我是否只需nice在它前面添加命令来降低优先级?:

nice -n 13 tar -cf 
nice -n 13 gzip -9

使用此方法有什么注意事项吗?谢谢。

答案1

有一些注意事项需要注意。由于问题没有指定确切的操作系统(但暗示它是某种类似 Unix 的操作系统),因此注意事项列表将取决于特定的操作系统和版本。需要记住的最重要的事项是:

nice旨在影响分配给进程的 CPU 时间,但不影响 RAM 或 I/O 容量。因此,除了预期效果外,其他可能的结果包括:

  • 由于 CPU 时间减少,备份需要更长的时间才能完成。但它将使用与以前一样多的 RAM,现在它将使用这些 RAM 更长的时间。由于用于其他目的的 RAM 减少,系统速度变慢,并且这种缓慢状态将比以前持续更长的时间。
  • 使用nice完全没有影响,因为备份过程从一开始就与 I/O 绑定,并且 I/O 调度不受 的影响nice。如果操作系统恰好是较新的 Linux 版本,则 I/O 调度可能会或可能不会受到影响,具体nice取决于所ionice使用的设置。

此外,甚至对 CPU 调度的确切影响也很大程度上取决于特定的操作系统和设置。某些内核的设置允许进程以高于或低于使用该nice命令可达到的优先级运行。

我自己遇到的一个警告似乎是 Ubuntu 14.04 特有的。在默认配置中,它会对进程进行分组以便进行调度。然后每个组都会获得公平的 CPU 时间份额。nice只会影响 CPU 时间分配给此类组中的进程的方式,而不会影响分配给每个组的进程的数量。对我来说,这完全破坏了 的使用nice,因为低优先级进程仍然可以从不同组中的进程中夺走 CPU 时间。

答案2

我会采取不同的方法......

不,我不会nice为此浪费时间。这gzip不是很好吗?另外,您使用的是以gzip -9CPU 为代价提供最大压缩率的压缩方式。您真的需要这种高于默认级别(级别 6)的压缩吗?

如果你使用 gzip 级别 9?

您的服务器规格是什么?有多少个 CPU,什么类型的 CPU?cat /proc/cpuinfo

如果你有多个 CPU,你会考虑使用pigz而是?它是多线程的,效率更高,可以更好地利用系统资源。


使用 1.8GB 文件进行的一些测试:

标准gzip(-6 压缩等级)

Original file size: 1.8G    CHL0001.TXT 
Compression time: 0m18.335s
Compressed file size: 85M   CHL0001.TXT.gz
Decompression time: 0m6.300s

gzip -9(最高压缩率)

Original file size: 1.8G    CHL0001.TXT
Compression time: 1m29.432s
Compressed file size: 75M   CHL0001.TXT.gz
Decompression time: 0m6.325s

pigz(-6 压缩级别)

Original file size: 1.8G    CHL0001.TXT
Compression time: 0m1.878s
Compressed file size: 85M   CHL0001.TXT.gz
Decompression time: 0m2.506s

pigz -9(最高压缩,多线程)

Original file size: 1.8G    CHL0001.TXT
Compression time: 0m5.611s
Compressed file size: 76M   CHL0001.TXT.gz
Decompression time: 0m2.489s

结论:额外的压缩是否值得花费更长的时间来压缩数据?

答案3

我意识到这已经偏离了原来的问题,但它仍然围绕着效率这个主题(你提到“我的服务器压力巨大”)...

我从您发布的内容推断(或猜测!)您正在创建一个tar包含一组文件的文件,然后对gzip结果进行 -ing。通过将一个文件直接传输到另一个文件,您可以节省大量磁盘 I/O(和临时空间需求):

tar cf - /path/to/stuff | gzip > archive.tar.gz

您可能会发现这对总耗时有显著的影响。

相关内容