多线程压缩效率提升指南:用 pigz 快速压缩文件
在日常工作中,我们经常需要压缩大文件或目录(比如备份数据、传输文件),但单线程压缩工具(如 tar)往往耗时较长,尤其面对 GB 级甚至 TB 级文件时,效率低下的问题更为明显。今天就来教大家如何利用pigz工具实现多线程压缩,充分利用服务器的多核 CPU 资源,大幅提升压缩速度。
一、为什么需要多线程压缩?
传统的tar是单线程工具,压缩时只能用到一个 CPU 核心,即使服务器有几十甚至上百个核心,也无法充分利用。而pigz(Parallel tar)是tar的并行实现,支持多线程处理,能同时调用多个 CPU 核心进行压缩,尤其对大文件或目录,速度提升非常显著(通常能快 5-10 倍,具体取决于核心数)。
二、准备工作:安装 pigz
pigz不是系统默认安装的工具,需要手动安装。以下是不同 Linux 发行版的安装方法:
1. CentOS/RHEL/Rocky Linux(基于 yum/dnf)
# 适用于CentOS 7/RHEL 7
sudo yum install -y pigz
# 适用于CentOS 8/RHEL 8/Rocky Linux 8+
sudo dnf install -y pigz
2. Debian/Ubuntu(基于 apt)
sudo apt update && sudo apt install -y pigz
3. 源码安装(适用于无包管理的系统)
如果上述方法无法安装,可以通过源码编译:
# 下载源码(版本号可替换为最新版)
wget https://zlib.net/pigz/pigz-2.8.tar.gz
# 解压
tar xzf pigz-2.8.tar.gz
cd pigz-2.8
# 编译安装
make
sudo make install
安装完成后,执行pigz --version,若输出版本信息,则表示安装成功。
三、多线程压缩实战:压缩 test 文件 / 目录
假设我们需要压缩名为test的文件或目录(可以是单个大文件,也可以是包含多个文件的目录),目标是生成test.tar.gz压缩包,并在后台运行以避免终端断开影响进程。
完整命令
nohup sh -c 'tar cf - test | pigz -p 线程数 > ./test.tar.gz' > backup.log 2>&1 &
命令解析
这个命令看似复杂,其实可以拆分为几个部分,逐一理解:
-
nohup ... &:让命令在后台运行,即使关闭终端也不会中断。nohup会将输出重定向到默认的nohup.out,但这里我们手动指定了日志文件。
-
sh -c '...':将单引号内的内容作为一个整体命令执行,确保管道(|)前后的命令能协同工作。
-
tar cf - test:
-
- tar是打包工具,负责将test目录 / 文件打包成一个归档文件;
-
- c:创建新归档;
-
- f -:f指定输出文件,-表示输出到 “标准输出”(而非直接写入文件),方便通过管道传给后续工具。
- | pigz -p 线程数:
-
- |:管道,将tar的输出(打包后的数据流)传递给pigz处理;
-
- pigz:多线程压缩工具;
-
- -p 线程数:指定压缩时使用的线程数(核心数),这是提升速度的关键。
-
> ./test.tar.gz:将pigz压缩后的结果写入test.tar.gz文件(最终的压缩包)。
-
> backup.log 2>&1:将命令的所有输出(包括标准输出和错误信息)重定向到backup.log,方便后续查看压缩过程和结果。
核心参数:如何选择线程数?
-p后面的线程数不是越大越好,建议遵循以下原则:
-
线程数不超过服务器的 CPU 核心数(过多会导致核心竞争,反而降低效率);
-
可以用nproc命令查看服务器的 CPU 核心数(例如输出 64,表示有 64 个核心);
-
推荐线程数:核心数的 80%-100%(例如 64 核服务器,可用-p 64或-p 56)。
示例(64 核服务器):
nohup sh -c 'tar cf - test | pigz -p 64 > ./test.tar.gz' > backup.log 2>&1 &
四、压缩过程监控与验证
1. 查看压缩进度
压缩在后台运行,可通过日志文件查看进度:
tail -f backup.log # 实时查看日志输出
也可以通过ps命令查看进程是否在运行:
ps -ef | grep pigz # 若能看到pigz进程,说明正在压缩
2. 验证压缩结果
压缩完成后(ps查看不到 pigz 进程),可以通过以下方式验证压缩包是否完整:
-
检查文件大小:ls -lh test.tar.gz,确认生成了压缩包;
-
解压测试(可选):pigz -d -p 线程数 test.tar.gz(解压后会生成test.tar,再用tar xf test.tar解开查看内容)。
五、总结
通过pigz的多线程压缩,我们能充分利用服务器的多核资源,大幅提升大文件 / 目录的压缩效率。核心步骤是:
-
安装pigz工具;
-
用tar打包目标文件 / 目录,通过管道传给pigz;
-
合理设置线程数(参考 CPU 核心数);
-
后台运行并记录日志,方便监控。
下次处理大文件压缩时,不妨试试这个方法,让效率提升一个档次!