05月27, 2017

控制pm2的日志文件爆炸

控制pm2的日志文件爆炸

今天查看linux主机,发现pm2日志文件把磁盘塞满了(在 ~/.pm2/logs 目录下)。

参考了github上的帖子后,找到下面解决方法。

  1. 安装pm2-logrotate 安装完成后,观察到正在按时间切分成多个日志文件,但空闲空间在迅速减少

    pm2 install pm2-logrotate
    
  2. 重启pm2

  3. 设置日志滚动的保留行数

    pm2 set pm2-logrotate:retain 100
    

    See https://www.npmjs.com/package/pm2-logrotate#configure for more info.

max_size 配置项默认是 10MB,并不意味着切割出来的日志文件大小一定就是 10MB,而是检查时发现日志文件大小达到 max_size,则触发日志切割。

interval 和 interval_unit 配置项指定了按时间维度进行日志切割。

切割是指将日志文件内容移到名称为 -out__YYYY-MM-DD-HH-mm.log 的日志文件中,所以日志文件大小往往是超过 max_size 的。

由于默认配置 interval 为 1, interval_unit 为 DD,所以每天至少会切割一次日志,每分钟当发现日志大小超过 10MB,也会触发一次日志切割。

pm2-logrotate 现阶段小问题还是比较多的(详见项目的 issues ),如:

  • 日志文件日期始终是前一天,日志文件大小超过 max_size 触发日志切割时,文件名中的日期也为前一天不合理了。 详见 Fast growing log files may be overwritten #18

  • 如果日志文件写得很快,切割时有可能因为日志文件名冲突,导致同名的旧日志文件被覆盖。 详见 Rotated files date #17

  • pm2 开启 merge_logs 时,日志会重复 详见 logrotate rotate the log multiple times if merge_logs is true #14

  • 无法精确限制日志占用空间。 不过 logrotate 工具也不能,所以也不算是个严重的问题。

    更好的方式可能是使用操作系统的 logrotate 服务。

本文链接:http://57km.cc/post/prevent pm2 log explosion.html

-- EOF --

Comments