记一次pm2日志文件过大引发的服务器问题

1. 发现问题

发现网址登陆不上,接口调用失败,超时
再登陆MySQL,发现也登不上
只能登陆阿里云了,结果发现磁盘满了,当时我就惊奇了,什么都没装怎么会满磁盘。。。html

输入如下指令查看当前磁盘容量node

df -h
复制代码

2. 定位大容量磁盘位置

这个时候得查看大容量文件夹,定位是什么出了问题git

输入如下指令github

du -h --max-depth=1
复制代码

因此,为何root文件夹会这么大明明就没有东西里面? bash

多是隐藏文件夹吧,进入root文件夹,继续输入指令查看服务器

这么多配置文件夹。。。运维

原来是PM2的问题,那PM2为何会占用这么大的容量!!!post

3. 解决pm2文件过大

3-1. 查找问题缘由

接着上谷歌搜了一下,多是日志文件占用的磁盘容量,那我就尝试清除日志文件,看可否解决问题ui

3-2. 清除PM2日志文件

经过指令关闭PM2,个人node进程id是0阿里云

  1. 输入指令,关闭node进程
pm2 stop 0
复制代码

若是PM2内有多个进程,则须要输入如下指令关闭全部的进程

pm2 stop all
复制代码
  1. 输入指令,删除PM2的日志
pm2 flush
复制代码

3. 接着再查看容量服务器的容量

能够看到,一会儿少了35个G,果真就是pm2日志的问题

4. 永久解决日志文件过大

此次问题是解决了,可是总不能每周或者每个月检查一第二天志,看看是否是过大了再手动删除。。。

果断在谷歌搜了一下PM2 日志相关的内容,果真搜到了日志管理用的插件pm2-logrotate

4-1. 安装插件pm2-logrotate

输入指令

pm2 install pm2-logrotate
复制代码

等待安装完成

4-2. pm2-logrotate具体配置参数:

配置项 简介
Compress 是否经过gzip压缩日志
max_size 单个日志文件的大小,好比上图中设置为1K(这个其实过小了,实际文件大小并不会严格分为1K)
retain 保留的日志文件个数,好比设置为10,那么在日志文件达到10个后会将最先的日志文件删除掉
dateFormat 日志文件名中的日期格式,默认是YYYY-MM-DD_HH-mm-ss,注意是设置的日志名+这个格式,如设置的日志名为abc.log,那就会生成abc_YYYY-MM-DD_HH-mm-ss.log名字的日志文件
rotateModule 把pm2自己的日志也进行分割
workerInterval 设置启动几个工做进程监控日志尺寸,最小为1
rotateInterval 设置强制分割,默认值是0 0 * * *,意思是天天晚上0点分割,这个足够了我的以为

4-3. 设置pm2-logrotat

这里咱们设置,当日志文件数量超过50个时候,就自动删除旧文件

pm2 set pm2-logrotate:retain 50
复制代码

设置完成后的样子,咱们看到retain由默认的30改为了50

固然,若是想后面直接看配置,也能够经过指令 pm2 conf pm2-logrotate来查看详细的配置。

5. 设置pm2开机自启动

pm2 startup,这个命令会在系统 /etc/systemd/system/ 路径下生成一个 pm2-root.service 文件用来开机启动 pm2 服务。

pm2 save, 保存当前 pm2 运行的各个应用保存到 /root/.pm2/dump.pm2 下,开机重启时读取该文件中的内容启动相关应用。

6. 结语

后来想了下,多是用的node中定时器的包node-schedule,主要此次没看PM2的log日志内容,就把文件给删除了,也不没能定位究竟是不是这个缘由,等过一个月再确认一下

使用这个包的话,能够看个人这篇文章 从零开始在NodeJs中使用node-schedule增长定时任务

参考资料

服务器——拯救你的磁盘及时删除pm2运行时的日志

pm2日志管理pm2-logrotate介绍

控制pm2的日志文件大小

使用PM2来部署nodejs项目

进程管理器pm2运维小结

相关文章
相关标签/搜索