大文件快速压缩打包
使用 commons-compress 实现可控多线程快速压缩
项目中解决的问题,在此记录下来。
Java自带压缩和市面上搜到的其他方法均不能满足需求,
简单的说就是慢,每次都是大批量至少2G的文件压缩打包,一般方法优化到极致2G也要30秒的样子,
找了一圈最后找到 Apache 开源的 commons-compress。
commons-compress 实现的 ZipArchiveEntry 效率足够高,
但会使用当前服务器全部可用线程,导致压缩过程中占用CPU资源过高,
严重影响正常业务进行。
无奈,啃起了源码,找到对应的解决办法。。。_
可以通过控制 ParallelScatterZipCreator 使用的线程数,控制压缩使用的CPU线程,
在提升压缩性能的同时减少对正常业务的影响。
通过实际测试结果选择合适的线程数。
我这里服务器配置较高,经过测试优化后2G的大文件打包压缩在8-10秒之间。
废话不多说,上源码地址。