compressoptions 是 logrotate 专用参数,用于向 gzip 等底层压缩命令传递额外选项,必须与 compress 同时启用才生效,不改变压缩工具本身,仅影响其行为。

logrotate 默认用 gzip 压缩旧日志,但不指定压缩级别,即使用默认的 -6(中等压缩比/速度平衡)。若想在磁盘空间和 I/O 开销之间取得更好平衡,可通过 compressoptions 显式设置 gzip 级别——这是最直接、最可控的方式。
compressoptions 是什么?
它是 logrotate 的专用参数,用于向底层压缩命令传递额外选项。必须与 compress 同时启用才生效。它不改变压缩工具本身(默认仍是 gzip),只影响其行为。例如:
-
compressoptions "-1"→ 最快压缩,CPU 和 I/O 开销最低,压缩率略低 -
compressoptions "-9"→ 最高压缩率,节省更多磁盘空间,但更耗 CPU 和时间,尤其在高并发轮转时可能拖慢 cron 执行 -
compressoptions "-6"→ 默认值,无需显式写入
如何配置 compressoptions
在对应服务的 logrotate 配置块中(如 /etc/logrotate.d/nginx)添加该行即可:
/var/log/nginx/*.log {
daily
rotate 30
compress
compressoptions "-1"
delaycompress
missingok
sharedscripts
postrotate
...
endscript
}
注意:compressoptions 必须写在 compress 之后,且不能与 nocompress 共存。修改后建议用调试模式验证语法:
sudo logrotate -d /etc/logrotate.d/nginx
何时选 -1、-3 还是 -6?
取决于你的瓶颈在哪:
- 如果磁盘充足但服务器负载高(比如 Web 服务繁忙、I/O 等待明显),优先用
-1或-3,压缩快、释放日志文件更快,减少锁等待 - 如果磁盘紧张(如嵌入式设备、小容量 SSD)、且轮转频次不高(weekly/monthly),可尝试
-9,但务必搭配delaycompress避免阻塞当日服务写入 - 日常生产环境推荐
-3:比默认 -6 节省约 10–15% CPU 时间,压缩率仅下降 2–4%,实测 IO 延迟更平稳
进阶提示:避免常见误用
compressoptions 只影响 logrotate 自身调用的压缩过程,不改变解压行为;解压仍用 gunzip,无需额外配 uncompresscmd。也不建议混用 zstd 等替代工具——虽然 zstd 效率更高,但它需要单独安装、配置 compresscmd 和 uncompresscmd,属于另一套优化路径,和单纯调 gzip 级别不属于同一操作层级。











