兩年前在騰訊雲購買了一個服務器,並用tomcat作爲容器部署了應用。當時買服務器選的是50G的空間,按理說,小型應用應該是絕對足夠了,最近上去df了一下,發現已佔用了85%的空間,一下就慌了。
root@VM-0-4-ubuntu:/usr/tomcat# df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 938580 0 938580 0% /dev
tmpfs 191716 19884 171832 11% /run
/dev/vda1 51474044 41431080 7405196 85% /
tmpfs 958576 48 958528 1% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 958576 0 958576 0% /sys/fs/cgroup
tmpfs 100 0 100 0% /run/lxcfs/controllers
tmpfs 191716 0 191716 0% /run/user/0
然後查找了一下大文件,使用指令 find ./ -size 100M,找到了一些大文件,最重要的是逮到了一條大魚,/tomcat/logs/catalina.out 29G!,從沒見過這麼大的日誌文件,而且是獨一個。
-rw-r--r-- 1 root root 20K Apr 21 23:40 catalina.2020-04-21.log
-rw-r--r-- 1 root root 31K Apr 22 23:56 catalina.2020-04-22.log
-rw-r--r-- 1 root root 16K Apr 23 23:59 catalina.2020-04-23.log
-rw-r--r-- 1 root root 1.3M Apr 24 14:52 catalina.2020-04-24.log
-rw-r--r-- 1 root root 30K Apr 24 15:07 catalina.2020-04-24.out
-rw-r--r-- 1 root root 29G Apr 24 14:49 catalina.out
不像其他日誌那樣可以按照時間切分,這樣對維護來說,絕對是個頭疼的問題,既不利於管理,也不利於分析統計。網上的解決方案大概有以下幾類:
1.暴力型
直接清空catalina.out,每次看到就來清空一下,使用 echo " " >catalina.out,這樣當然是很直接的,但是日誌是生產環境的一個重要組成部分,沒了日誌就玩不動了,這樣肯定不行。
2.日誌切分
這種方式就是將一整塊的catalina.out,切分爲按時間劃分的單獨的部分(此處的切分是讓之後的日誌輸出有劃分,並不是值現在這個29G的大怪物)。使用cronolog日誌切分工具切分Tomcat的catalina.out日誌文件。
1>下載安裝cronolog
下載地址是外網的,親測無法直接下載,retry多次無法下載,只能通過其他途徑獲取,本想上傳上來,沒想到被別人先一步傳過了,收費9C幣,搶錢啊。下載點這裏cronolog-1.6.2.tar.gz
經過下載、解壓、編譯、安裝之後,cronlog就安裝在/usr/local/sbin下。
wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
tar zxvf cronolog-1.6.2.tar.gz
./cronolog-1.6.2/configure
make
make install
2.配置
在tomcat/bin/catalina.sh中
1>註釋掉 441行
# touch "$CATALINA_OUT"
1>435與444行,兩處 日誌輸出路徑,作如下修改:
org.apache.catalina.startup.Bootstrap "$@" start \ >> "$CATALINA_BASE"/logs/catalina.out 2&1 &
改成:
org.apache.catalina.startup.Bootstrap"$@" start \ |/usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null 2>&1 &
3.重啓tomcat,查看日誌輸出情況,發現最新的日誌已經分塊爲 catalina.2020-04-24.out,用指令 tail -f catalina.2020-04-24.out查看實時輸出的log,正常。