記一次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運維小結

相關文章
相關標籤/搜索