command pigz

  1. pigz简介

    1
    pigz是一个高效的压缩工具,可以将多核CPU的每一分剩余性能都用来做压缩计算.而传统的gzip则只能用单核CPU.比如一台2个8core cpu服务器采用pigz和gzip压缩相同的数据,一般性能差距至少在7-8倍以上(一般不会达到理论的16倍,因为受限于磁盘的读写速度和内存等资源)
  2. pigz 安装

    1
    [root@localhost ~]# yum -y install pigz
  3. pigz 使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //压缩
    tar cvf - {dir_name} | pigz -9 -p 24 > file.tgz

    说明:
    -9 表示压缩比,数值越大压缩率越大
    -p 表示指定cpu的核数


    //解压
    pigz -d file.tgz
    tar -xf --format=posix file
  4. pigz 扩展

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    之前,跨主机拷贝大数据时,通常做法如下:
    * 在源端打包压缩为tar.gz文件
    * 采用scp或者rsync等方式拷贝到目标主机
    * 在目标主机解压文件
    这三个过程是同步阻塞,即不能同时异步执行,导致效率低下

    现在,我们将过程优化为以数据流的方式,同时执行(非阻塞模式),则效率一般可以提高到原来的3倍以上,具体实现如下:
    磁盘读取-->打包(tar)-->压缩(gzip)-->传输(ssh)-->解压缩(gzip)-->拆包(tar)-->落盘

    比如,我要将本地的test目录拷贝到"目标IP"的的data目录,则命令如下:
    tar -c test/ |gzip |ssh -c arc 目标IP "gzip -d|tar -xC /data"

    如果不需要解压,则命令变为:
    tar -c test/ |pigz |ssh -c arc 目标IP "cat >/data/test.tar.gz"

    注意: 因为采用了流式压缩,解压过程必须加上-i参数,及tar –ixf /data/test.tar.gz