修复消耗CPU 100% 的logrotate进程
更新:HHH   时间:2023-1-7


上周,我注意到一台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 // 一切正常

返回建站服务器教程...