我正在运行unzip
解压缩大文件。然而,我的 CPU 使用率低于 15%,而 RAM 仅利用了 8 GB 中的 1-1.2 GB。
有没有办法为这个unzip
程序分配更多的CPU功率和RAM?
谢谢。
我使用的是 Lubuntu 16.04
答案1
程序会占用所有可以获得的内存和 CPU 能力,除非它们有内置的限制。unzip
没有这样的内置限制。你可以少给它一些,但不能给它多一些,因为默认情况下它可以想拿多少就拿多少。
解压缩不是一个内存密集型过程。解压缩巨大存档的主要内存成本是解压缩将文件列表保留在内存中。
速度的限制因素可能是 CPU 功率或磁盘(或者网络,如果您正在网络上读取或写入文件)。这取决于您的磁盘相对于 CPU 的速度。检查进程是否占用 100%一核。如果不是,那么加速的唯一方法就是加速输入/输出。这可能意味着更快的磁盘,或者安排将输入和输出放在不同的磁盘上。
如果该进程 100% 占用一个核心,那么您可以通过并行化来加速它。对于许多压缩格式来说,一个文件的解压缩本质上是不可并行的,因为该格式具有很强的适应性:压缩是通过查找重复模式并通过对先前模式的某种间接引用来替换它们来实现的。一些压缩格式具有“重新初始化点”,允许独立解压缩每个块;我知道 bzip2 至少是这样。即使格式不需要,某些压缩工具也会执行此操作。但据我所知,zip 的情况并非如此。另一方面,zip 单独压缩存档的每个成员,因此可以独立解压缩每个文件。因此,如果你有n核心,您可以让它们全部忙于解压缩单独的文件(如果您的 I/O 速度够快)。
那么问题就是找到一个并行的解压缩实现。我认为p7zip支持使用7z x -mmt=on foo.zip
or 7z x -mmt=8
(使用 8 核),但 p7zip 的文档不是很好,我还没有确认这确实可以并行化。
答案2
(因为我无法对另一个答案添加评论)
htop
是查看进程信息的工具之一。如果“S”列(代表状态)显示“D”,则表示进程被阻塞,通常等待 I/O 操作完成。增加网络或存储的带宽(例如 RAID 或更快的 HDD/SSD/NVMe)以解决该瓶颈。
iotop
是检测此类瓶颈的另一个有用工具;它会显示该进程 100% I/O 使用率。
答案3
您可以使用 Pigz,它使用所有 CPU 核心进行并行压缩/解压缩,解压缩 unpigz 在某一点上是串行的,但我认为它得到了增强。真的超级酷