Linux下tomcat的catalina.out日志文件过大处理方法


问题情景

在linux下运行tomcat会碰到catalina.out日志文件一直增大的问题

有用Tomcat的,绝对都会遇到这样一个问题:catalina.out文件过大。

它是Tomcat默认生成的日志文件,会随着时间的推移,逐渐增大,不断的增长,甚至达到几G,几十G的大小。由于文件过大,不仅占系统的存储,我们还将无法使用过常规的编辑工具进行查看,严重影响系统的维护工作。

分析:

先来看看Tomcat中catalina.out、catalina.log、localhost.log、access.log的区别吧!

catalina.out 日志

catalina.out 日志文件是 Tomcat 的标准输出(stdout)和标准出错(stderr)输出的“目的地”。我们在应用里使用System.out打印的内容都会输出到这个日志文件中。另外,如果我们在应用里使用其他的日志框架,配置了向 Console 输出日志,则也会输出到这个文件。

注意点:随着系统上线的时间越来越长, catalina.out 会变得很大,所以最好还是要设定一些定时任务来清理归档这个日志文件。

catalina.YYYY-MM-DD.log 日志

catalina.{yyyy-MM-dd}.log 是 Tomcat 自己运行的一些日志,主要记录 Tomcat 在启动和暂停时的运行内容。

localhost.YYYY-MM-DD.log

localhost.{yyyy-MM-dd}.log 主要是应用初始化(listener, filter, servlet)未处理的异常最后被 Tomcat 捕获而输出的日志,它也是包含 Tomcat 的启动和暂停时的运行日志,但它没有 catalina.YYYY-MM-DD.log 日志全。

localhost_access_log.YYYY-MM-DD.txt

Tomcat 的请求访问日志,请求的时间,请求的类型,请求的资源和返回的状态码都有记录。配置这个日志非常有必要,可以让我们清楚的看清请求的状况。

解决方法

CentOS6.5后自带logrotate程序,可以解决catalina.out的日志轮转问题

<1>在/etc/logrotate.d/目录下新建一个tomcat的文件

cat >/etc/logrotate.d/tomcat ------------ 

/opt/apache-tomcat-9.0.65/logs/catalina.out{            要轮转的文件
    copytruncate                                创建新的catalina.out副本,截断源catalina.out文件
    daily                                       每天进行catalina.out文件的轮转
    rotate 7                                    至多保留7个副本
    missingok                                   文件丢失了,轮转不报错
    compress                                    使用压缩
    size 16M                                    当catalina.out文件大于16MB,就轮转
}

其他参数:

compress                                   通过gzip 压缩转储以后的日志
nocompress                                 不做gzip压缩处理
copytruncate                               用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
nocopytruncate                             备份日志文件不过不截断
create mode owner group                    轮转时指定创建新文件的属性,如create 0777 nobody nobody
nocreate                                   不建立新的日志文件
delaycompress                              和compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress                            覆盖 delaycompress 选项,转储同时压缩。
missingok                                  如果日志丢失,不报错继续滚动下一个日志
errors address                             专储时的错误信息发送到指定的Email 地址
ifempty                                    即使日志文件为空文件也做轮转,这个是logrotate的缺省选项。
notifempty                                 当日志文件为空时,不进行轮转
mail address                               把转储的日志文件发送到指定的E-mail 地址
nomail                                     转储时不发送日志文件
olddir directory                           转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir                                   转储后的日志文件和当前日志文件放在同一个目录下
sharedscripts                              运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本
prerotate                                  在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行
postrotate                                 在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成
daily                                      指定转储周期为每天
weekly                                     指定转储周期为每周
monthly                                    指定转储周期为每月
rotate count                               指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
dateext                                    使用当期日期作为命名格式
dateformat .%s                             配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数
size(或minsize) log-size                   当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)及KB (sizek)或

<2>当执行以上操作时是自动执行的,也可手动切割

logrotate /etc/logrotate.conf

如果只轮转tomcat配置文件,要指定文件

logrotate --force /etc/logrotate.d/tomcat

工作原理

  1. 每天晚上 cron 定时任务会扫码目录 /etc/cron.daily/

  2. 触发/etc/cron.daily/logrotate脚本,即运行脚本:

    /usr/sbin/logrotate /etc/logrotate.conf
    
  3. /etc/logrotate.conf会扫码所有/etc/logrotate.d/目录的脚本

  4. 触发/etc/logrotate.d/tomcat上面新建的配置

总结

对于Linux中,内存快满了解决的方法

  1. 先查看内存使用情况
  2. 进入磁盘挂载的目录 / ,查看各个文件的占用大小
  3. 查看哪一个文件比较大(一层一层找)一般删除的是积累了很久很大的日志文件

具体命令如下:

查看内存使用情况:

df -h

进入磁盘挂载的目录/,查看各个文件的占用大小:

cd /
du -sh *

查看哪一个文件比较大(一层一层找):

du -sh *

而这个方法仅仅只是找到哪个文件占用的磁盘空间大而已。在实际中我们还会出现IO读写高等问题。

这些问题具体参考文章 : Linux系统中负载较高&磁盘I/O %util特别高问题排查思路与解决方法


文章作者: 冬瓜冬瓜排骨汤
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 冬瓜冬瓜排骨汤 !
  目录