写在前边:
服务器上使用pm2管理项目时,日志管理变得非常麻烦,知道pm2-logrotate后 安装启动后服务器磁盘空间直接爆炸,导致服务停机无法使用,排查后记录。
pm2-logrotate是一个npm管理模块
1. 安装命令
pm2 install pm2-logrotate
如果在服务器安装特别慢的话,需要配置淘宝源
npm config set registry https://registry.npm.taobao.org/
2. 查看pm2-logrotate默认的参数
pm2 conf pm2-logrotate
3. 设置参数命令
pm2 set pm2-logrotate:max_size 100M
命令设置具体的参数,支持的参数有以下:
-
Compress:是否通过gzip压缩日志
-
max_size:单个日志文件的大小
-
retain:保留的日志文件个数,比如设置为10,那么在日志文件达到10个后会将最早的日志文件删除掉
-
dateFormat:日志文件名中的日期格式,默认是YYYY-MM-DD_HH-mm-ss 注意是设置的日志名+这个格式,如果设置的日志名为main_out.log 则会生成 main_out.log_YYYY-MM-DD_HH-mm-ss.log名字的日志文件
-
rotateModule:会把pm2本身的日志也进行分割
-
workerinterval:设置启动几个工作进程监控日志尺寸,最小为1
-
rotateinterval:设置强制分割,默认值是 0 0 * * * ,意思是每天晚上0点分割
设置完毕后可以通过查看pm2-logrotate参数命令来查看是否修改成功
4. 配置完成后需要重启pm2(重要步骤,如果不重启可能会出现下面的问题)
pm2 restart all
5. 存在的问题
-
利用默认参数进行分割时,项目中一直使用的文件由于前期未分割,文件大小比较大。如果觉得这部分日志文件有用,可以先备份,之后在对应pm2日志存放目录删除之后再进行分割。如果不删除大日志文件 进行日志分割后会将大文件分割,分割后的总体效果就是将大文件整体copy一份,如果服务器磁盘空间不足就会导致磁盘空间瞬间爆满,服务器上的服务都会异常。
-
可以使用 df -h 来查看磁盘占用率,如果删掉某个大文件后,磁盘空间并未释放的情况下,可以利用重启服务,包括 pm2-logrotate 服务 以及 项目本身。使用命令 pm2 restart all
-
如果上述操作都做完后,使用 df -h 发现磁盘空间仍没有释放:
-
可以使用 lsof | grep deleted 来查看已经被删除但是还在被某个服务调用的文件(因为此时该文件仍然会占用磁盘空间)来找到对应的pid
-
在确定该进程可以被 kill 掉之后,kill掉该进程即可释放磁盘空间
-