Linux系统的项目日志文件占用内存过大优化

本文介绍了如何处理Tomcat的日志文件catalina.out和Java项目日志文件nohup.out过大问题。通过利用Linux的logrotate程序进行文件轮转,以及调整Java项目的启动命令,实现日志文件的自动管理和磁盘空间的有效利用。
摘要由CSDN通过智能技术生成

1,处理Tomcat日志文件catalina.out过大问题

a,利用Linux自带的logrotate程序来处理catalina.out的文件过大
(1)编辑logrotate.conf文件,打开compress选项(去掉注释)

[root@localhost ~]# cat /etc/logrotate.conf | grep -v “^$”| grep -v “#”

weekly
rotate 4
create
dateext
compress   <<这一项,去掉注释

在这里插入图片描述
(2)添加指定文件,在/etc/logrotate.d/目录下新建一个名为tomcat的文件

[root@localhost ~]# cat > /etc/logrotate.d/tomcat <<EOF

方案1:

/home/tomcat/logs/catalina.out{ #要轮转的文件
    copytruncate    # 创建新的catalina.out副本后,截断源catalina.out文件
    notifempty      # 如果是空文件的话,不转储
    daily    # 每天进行catalina.out文件的轮转
    rotate 20     # 至多保留20个副本
    missingok    # 如果要轮转的文件丢失了,继续轮转而不报错
    compress     # 使用压缩的方式(节省硬盘空间;一个2~3GB的日志文件可以压缩成60MB左右)
    size 100M     # 当catalina.out文件大于100MB时,就轮转
}

方案:2

/home/tomcat/logs/catalina.out{ #要轮转的文件
    copytruncate    # 创建新的catalina.out副本后,截断源catalina.out文件
    notifempty      # 如果是空文件的话,不转储
    daily    # 每天进行catalina.out文件的轮转
    rotate 20     # 至多保留20个副本
    missingok    # 如果要轮转的文件丢失了,继续轮转而不报错
    compress     # 使用压缩的方式(节省硬盘空间;一个2~3GB的日志文件可以压缩成60MB左右)
    size 100M     # 当catalina.out文件大于100MB时,就轮转
    sharedscripts  # 执行脚本
    postrotate # 脚本开始
    	# 把操作当前的日志文件的进程停止并清空(注意:这里的进程是指日志文件的进程,不是应用程序的进程,这两者要区分起来)
    	# 如果不停止操作当前的日志文件的进程,压缩文件后,原文件的存储空间会一样不变,内容会减少,出现/0或其他乱码代替了存        		        储空间,达不到压缩的效果。
	    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript  #脚本结束
}

参数说明:

  compress          #通过gzip 压缩转储旧的日志
  nocompress        #不需要压缩时,用这个参数
  copytruncate      #用于还在打开中的日志文件,把当前日志备份并截断
  nocopytruncate    #备份日志文件但是不截断
  create mode owner group    #使用指定的文件模式创建新的日志文件
  nocreate         #不建立新的日志文件
  delaycompress    #和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
  nodelaycompress  #覆盖 delaycompress 选项,转储同时压缩。
  errors address   #专储时的错误信息发送到指定的Email 地址
  ifempty         #即使是空文件也转储,这个是 logrotate 的缺省选项。
  notifempty      #如果是空文件的话,不转储
  mail address    #把转储的日志文件发送到指定的E-mail 地址
  nomail          #转储时不发送日志文件
  olddir directory    #转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
  noolddir            #转储后的日志文件和当前日志文件放在同一个目录下
  prerotate/endscript     #在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
  postrotate/endscript    #在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
  sharedscripts    #所有的日志文件都轮转完毕后统一执行一次脚本
  daily            #指定转储周期为每天
  weekly           #指定转储周期为每周
  monthly          #指定转储周期为每月
  rotate count    #指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
  size size       #当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB

(3)执行方式
a,系统自动执行

每天晚上crond守护进程会运行在/etc/cron.daily目录中的任务列表与logrotate相关的脚本也在/etc/cron.daily目录中。
运行的方式为"/usr/bin/logrotate /etc/logrotate.conf";
/etc/logrotate.conf文件include了/etc/logrotate.d/目录下的所有文件。还包括我们上面刚创建的tomcat文件;
/etc/logrotate.d/tomcat文件会触发/home/tomcat/utr/logs/catalina.out文件的轮转。

b,手动执行:

[root@localhost ~]# logrotate /etc/logrotate.conf

c,只轮转刚刚的tomcat配置文件:logrotate --force /etc/logrotate.d/tomcat

[root@localhost ~]# logrotate --force /etc/logrotate.d/tomcat

2,Tomcat使用域名(80端口)访问配置

[root@localhost ~]# vi /home/tools/apache-tomcat-8.5.42/conf/server.xml

<?xml version='1.0' encoding='utf-8'?>

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  
  
  <Service name="Catalina">
  
    <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
	
    <Engine name="Catalina" defaultHost="localhost">
       <Realm className="org.apache.catalina.realm.LockOutRealm">
         <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
       </Realm>

      <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />

	<!--<Context path="" docBase="esqsui" debug="0" reloadable="false" crossContext="true"/>-->
		<Context path="" docBase="esqsui" debug="0" reloadable="false" crossContext="true"/>
      </Host>
    </Engine>
  </Service>
  
  
</Server>

3,处理Java项目日志文件nohup.out过大问题

(1)添加指定文件,在/etc/logrotate.d/目录下新建一个名为java_logloop的文件

[root@localhost ~]# cat > /etc/logrotate.d/java_logloop<<EOF

/home/esqabc/esqabc_jar/nohup.out{ #要轮转的文件
    copytruncate    # 创建新的nohup.out副本后,截断源nohup.out文件
    notifempty      # 如果是空文件的话,不转储
    daily          # 每天进行nohup.out文件的轮转
    rotate 20     # 至多保留20个副本
    missingok    # 如果要轮转的文件丢失了,继续轮转而不报错
    compress     # 使用压缩的方式(节省硬盘空间;一个2~3GB的日志文件可以压缩成60MB左右)
    size 100M     # 当nohup.out文件大于100MB时,就轮转
}

(2)Java项目启动命令
a,错误的启动命令

[root@localhost ~]# nohup java -jar esqbac-jar-1.0.0.jar > nohup.out 2>&1 &

说明:启动命令中 esqbac-jar-1.0.0.jar > nohup.out & 重定向输出用的是 >
这种情况如果服务不停止,文件占用的磁盘空间不会被释放

b,正确的启动命令

[root@localhost ~]# nohup java -jar esqbac-jar-1.0.0.jar >> nohup.out 2>&1 &

说明: 把 > 替换成 >> 追加的形式,就可以被logrotate正常切割

c,可以使用(ll -h)和(du -sh )来查看实际的存储大小

[root@localhost ~]# ll -h
[root@localhost ~]# du -sh

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值