IQ catch chichen
关注他
22 人赞同了该文章
来源: https://zhuanlan.zhihu.com/p/20926080
发现 http://kernel.org 还有一些 gnu 程序都换成了 xz 作为压缩方式,忍不住好奇
不过大神们都用 xz 了,那肯定是说 xz 比 gzip 好
先执行 xz 试一下,我去,比 gzip 慢了10倍!gzip 5秒能搞定的东西,xz 要几十秒,压缩出来的东西确实更小了一点
不甘心,看看 man xz ,咦发现 xz 支持多线程,只需 xz -T0 就可以自动按机器线程数多线程执行了
结果试了好几次,xz 还是和之前一样慢,上网查查怎么回事呗,原来只有 xz 5.2 以上才支持多线程,坑爹的 man,不会就别写在自己的说明书里好不好!
下载编译安装新的 5.2.2 xz,压缩一下 cpu 直接飙到30倍,那叫一个爽,压缩耗时也一下子变短了,甚至超越了 gzip
那具体数据是怎样的呢,压缩两个性能指标最关键,一个是耗时,一个是压缩比,压缩比就是压缩后文件大小 除以 源文件大小
耗时
xz 多线程最快,但只比 gzip 快一丢丢
随手拿了一个近 300M 的文件压缩对比一遍,xz 和 7z 压缩最狠,压到50M了, 相当于 1/6,gzip 效果最差,差不多 1/3 ,但实际差距也就在一倍之内
附上压缩比
xz 和 7z 为啥会表现这么接近呢?
原来是他们都使用了一个开源算法和库 LZMA,系统中必须有这库才可以运行哦
xz 和 bzip2 还有 gzip 一样,附带了一堆附加工具
xzgrep
xzcat
xzdiff
xzmore
xz 虽然只是压缩比占优,但在关键时刻非常有用,比如 logrotate 我需要多存几天日志,那就需要非常狠的压缩
logrotate 默认是 gzip 来压缩的,如何改成 xz 呢?
# logrotate.conf /data/xxx.log { size 40G dateext dateformat -%Y%m%d-%s rotate 15 compress compresscmd /usr/local/bin/xz uncompresscmd /usr/local/bin/unxz compressoptions "--threads=0" compressext .xz missingok notifempty sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }