限制 tar 压缩过程 CPU 占用,本质是限制 gzip/pigz 等压缩子进程;推荐优先使用多线程 pigz 缩短耗时,再配合 cpulimit(作用于 pigz 进程 PID)精准限频,或用 nice -n 15 轻量降优先级,长期服务则用 systemd CPUQuota 内核级配额。

直接限制 tar 本身的 CPU 占用率并不现实——因为 tar 打包阶段(即读取文件、生成归档流)本质是 I/O 密集型操作,CPU 消耗很低;真正吃 CPU 的是后续的压缩环节(如 gzip)。所以“限制 tar 打包过程中的 CPU 占用”,实际是指**限制整个打包+压缩流水线的 CPU 使用强度**,避免拖垮线上服务。
优先用 pigz 替代 gzip,释放单核瓶颈
默认 tar -czf 调用的是单线程 gzip,只占满 1 个核心,但压缩慢、持续时间长,容易在业务低谷期也拉高负载。换成多线程 pigz 后,可缩短总耗时,降低对系统的影响窗口:
- 安装:
sudo apt install pigz(Ubuntu/Debian)或sudo yum install pigz(CentOS/RHEL) - 压缩命令:
tar -cf - /data | pigz -p 2 > backup.tar.gz(-p 2表示仅用 2 个线程,适合保留多数 CPU 给业务) - 解压命令:
tar -I 'pigz -p 2' -xvf backup.tar.gz
用 cpulimit 精准压制压缩子进程
cpulimit 是最常用、见效快的方案,它通过周期性暂停进程来软性控 CPU 百分比。注意:它要作用在 gzip 或 pigz 进程上,而不是 tar 主进程:
- 先启动压缩:
tar -cf - /data | pigz > backup.tar.gz & - 查出 pigz 的 PID:
pgrep -f "pigz.*backup.tar.gz" - 限 CPU 到 40%:
cpulimit -p <font color="green">PID数值</font> -l 40 - 想后台长期生效加
-b参数:cpulimit -p <font color="green">PID数值</font> -l 30 -b
用 nice 降低调度优先级(轻量辅助)
如果系统整体空闲、只是不想和关键进程争资源,nice 是最轻量的选择。它不设硬上限,但在 CPU 紧张时自动让出时间片:
- 启动时指定:
nice -n 15 tar -cf - /data | pigz -p 2 > backup.tar.gz -
-n 15属于中低优先级(范围 -20~19),不影响其他进程响应,也不需要额外工具
systemd 服务方式(适用于长期运行的备份任务)
如果你把备份封装成 systemd service(比如每日定时执行),可用内核级配额控制更稳定:
- 编辑服务文件:
sudo systemctl edit backup.service - 填入:
[Service]<br>CPUQuota=30%
- 重载并启用:
sudo systemctl daemon-reload && sudo systemctl restart backup.service - 该限制对整个 service 进程树生效,包括
tar、pigz及其子进程

















