You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

pm2-logrotate配置不生效致日志达1.7G,如何解决日志占用问题?

解决pm2-logrotate未按配置切割日志、占用大量资源的问题

我来帮你一步步排查并修复这个问题,从你的配置来看,核心问题出在rotateInterval的Cron表达式配置错误,再结合几个关键操作就能解决日志膨胀的问题:

1. 修正错误的Cron表达式

你当前的rotateInterval配置是* * */1 * * *,这个表达式的含义是每分钟都触发一次日志检查,这会打乱pm2-logrotate按大小切割的逻辑,甚至导致切割机制失效。

根据你的需求(按大小切割+自动删除旧日志),建议把rotateInterval调整为每天凌晨0点触发一次定时检查,同时保留按大小切割的兜底逻辑:

pm2 set pm2-logrotate:rotateInterval "0 0 * * *"

如果只想完全依赖max_size触发切割,可以把rotateInterval设为空字符串,但定时检查能作为更可靠的兜底机制。

2. 确保核心配置生效并重启日志模块

重新确认你的关键配置,强制刷新并重启pm2-logrotate:

# 确认日志最大大小为10M
pm2 set pm2-logrotate:max_size 10M
# 只保留1份旧日志(超过的自动删除)
pm2 set pm2-logrotate:retain 1
# 重启日志管理模块,让配置生效
pm2 restart pm2-logrotate

3. 手动清理现有超大日志

当前已经存在1.7G的日志,先手动清理避免占用资源:

# 清空所有pm2应用的日志(会生成新的空日志文件)
pm2 flush
# 或者手动删除指定应用的旧日志(默认路径是~/.pm2/logs/)
rm ~/.pm2/logs/<你的应用名称>-out.log ~/.pm2/logs/<你的应用名称>-error.log
# 重启应用生成新日志
pm2 restart <你的应用名称>

4. 验证配置是否正常工作

执行以下命令检查最终配置:

pm2 conf pm2-logrotate

之后可以做个小测试:手动往日志文件写入大量内容(比如用dd if=/dev/zero of=~/.pm2/logs/<你的应用名称>-out.log bs=1M count=11),等待30秒(你的workerInterval配置),看是否自动切割日志并只保留1份压缩后的旧日志。

额外注意点

  • workerInterval设为30秒是合理的,这是pm2-logrotate检查日志大小的间隔,无需调整;
  • compress: true会自动压缩旧日志,进一步节省磁盘空间;
  • 如果后续仍出现问题,可以尝试更新pm2和pm2-logrotate到最新版本:npm update -g pm2 pm2-logrotate

内容的提问来源于stack exchange,提问作者Cátia Matos

火山引擎 最新活动