在linux和unix系统中,常用的压缩软件有gzip,bzip,xz等。对tar来说也有相关的参数,分别是-z -j -J。压缩率大致为gzip<bzip<xz。xz格式压缩出来虽然文件较小,但它也是三种工具里压缩最慢的。不管用哪个工具压缩,都会有一个令人诟病的地方就是,对于一个文件只能采用一个线程进行压缩,导致CPU利用率特别低,哪怕再高配的服务器也快不起来。而xz5.2.0之后的版本就解决了这一问题,可以实现多线程压缩和单线程解压。对于压缩数据库导出文件这样特别大的单个文件特别给力。实现了CPU的高利用率,缩短压缩时间,同时保持了很高的压缩率。实测oracle导出文件能压缩至1%左右,DB2导出文件能压缩到2%左右,十分快且使用。
首先你需要安装xz 5.2.0之后的版本才能使用多线程压缩的功能,目前最新的版本为5.2.4,推荐使用最新的版本,因为之前的版本会存在一些内存控制的问题导致压缩有可能失败。
压缩一个文件特别方便,只需使用 -z参数如
xz -z ./haha.txt
就会在当前目录下生成一个haha.txt.xz文件,解压直接使用-d参数即可
如果想要自定义文件名,可以使用-c参数,如下
xz -c ./haha.txt > gaga.xz
如果想要在tar结束后对tar包进行压缩,可以使用管道,如下:
tar -cf - smit.log | xz -c > haha.tar.xz
如果要使用多线程,只需指定-T 参数或者--threads参数,如下,使用4个线程进行压缩
xz -T 4 -z ./haha.txt
注意,-T 参数只是指定最多利用的线程数,实际利用可能比该参数低。如果参数指定0,那么就尽可能多的使用CPU线程。一般来说线程越多CPU利用率越高。
另外,使用多线程压缩实际上是在读入文件的时候先进行分块,然后让不同线程压缩不同的分块,最后再拼合。在分块的时候,会在块的头部写入block的大小,默认块大小为1MB左右。可以参考官网的文档:
-T threads, --threads=threads
Specify the number of worker threads to use. S