修復消耗CPU 100% 的logrotate進程

上週,我注意到一臺NLP服務器花費大量時間來完成分析請求,其中一個CPU核心長期佔用率達到100%。對比剛上線的時候,各個服務的響應速度明顯要慢得多。

因此,使用了系統的top和第三方的htop分別做了篩查,最終定位到logrotate系統的日誌分割服務出的問題。

以下記錄一下具體的處理辦法:

首先,執行下面的命令:

$ top

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6479 root 20 0 413m 409m 860 R 99 40.9 927:36.64
/usr/sbin/logrotate /etc/logrotate.conf

$ tail /var/lib/logrotate/logrotate.status

//通過該狀態文件得知,裏面存在大量tomcat的日誌處理任務,由tomcat並沒有配置 自定義的日誌 處理邏輯,由系統託管日誌,且,tomcat的業務處理裏非常大,因此,使用 logrotate需要處理的任務過多,造成CPU和磁盤非常忙。

$ ls /var/lib/logrotate/logrotate.status -lh

-rw-r--r-- 1 root root 66M Aug 24 08:18 /var/lib/logrotate/status

以上命令得到整個狀態文件居然高達156M,可怕!!

然後,來處理掉這個問題吧!

1) $ ps aux|grep logrotate // 找出 logr的進程號
2) $ kill -9 進程號 // 停止logr
3) $ /usr/local/tomcat/bin/shutdown.sh // 停止tomcat
4) $ rm -rf /usr/local/tomcat/logs // 清理tomcat下的日誌文件[pid也可能被放置在這裏,所以,我們先停止tomcat]
5) $ rm -f /var/lib/logrotate/logrotate.status //刪除logr的狀態日誌文件太大的日誌文件也會導致其使用100%CPU
6) $ logrotate -f /etc/logrotate.conf //重建立 狀態日誌文件logrotate.status
7)重新啓動tomcat // 一切正常

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章