# 2021-01-03 #「tar」- 限制资源使用
问题描述
在使用 tar 进行解压时,会占用大量的系统资源(CPU,I/O),导致系统卡死或其他服务无法响应。尤其是压缩包较大且解压时间较久时,会直接导致其他服务不可用。在使用 tar 进行压缩时,虽然我们没有遇到类似问题,但是也可能存在这种问题。
我们希望找到一种方法限制 tar 所使用的系统资源,不管是打包还是压缩。
解决方法
方法一、(推荐)使用 pv 命令
pv,用于监控流经管道的数据的进度,它的角色类似于安装在水管上水表。虽然它不能限制特定程序的资源使用情况,但是它可以控制数据的读取速度。
(1)由 pv 负责读取数据,并通过选项控制 pv 的读取速度
(2)将数据写入管道
(3)而 tar 从管道中读取数据进行解压
方法二、使用空闲主机
如果有可能,则可以在空闲主机上进行操作,有必要则可以通过网络进行数据传回(比如使用 rsync 命令)。
方法三、使用 Docker 服务
有点大材小用,而且麻烦(需要安装环境),但是也算可用途径。
方法四、我们的方法
由于解压任务并非当务之急,我们有条件将工作放在夜间执行:
#!/bin/sh sleep 4h && tar -xf someshit.tar.gz
参考文献
- K4NZ/限制资源使用
- Preventing tar from using too much CPU and disk (old laptop crashes if 100%)
- Slowing down (limiting) tar, mysqldump or other processes to save IO bandwidth