系統日誌文件過大優化

聲明:
如果您有更好的技術與作者分享,或者商業合作;
請訪問作者個人網站 http://www.esqabc.com/view/message.html 留言給作者。
如果該案例觸犯您的專利,請在這裏:http://www.esqabc.com/view/message.html 留言給作者說明原由
作者一經查實,馬上刪除。

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

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