今早正在愉快地使用Flutter開發用戶端的時候,突然發現所有接口都使用不了了,覺得很奇怪,伺服器上什麼都沒有動怎麼突然不行了呢?
于是登入CentOS伺服器檢視Spring Boot服務的日志,發現了以下異常:
1
2
3
4org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is java.lang.IllegalStateException: Unable to create the directory [/tmp/tomcat.1964230947136987004.8000] to use as the base directory
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:157)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
哦,原來是Tomcat無法建立它的臨時工作目錄了。
于是就執行
1df -h
查了一下伺服器的硬碟資訊:
1
2
3
4
5
6
7Filesystem Size Used Avail Use% Mounted on
/dev/vda1 99G 94G 0 100% /
devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs 7.8G 532K 7.8G 1% /run
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
tmpfs 1.6G 0 1.6G 0% /run/user/1000
果然!根目錄下使用率100%,硬碟被占滿了!這是個嚴重的問題,不過該怎麼排查哪些檔案占用的空間呢?查了一番資料,發現使用下面指令可以一層層的跟蹤排查:
1du -x -m --max-depth 1 /
先從根目錄開始:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16[[email protected] log]# du -x -h -m --max-depth 1 /
5 /tmp
4104 /root
668 /opt
1 /media
55960 /var
708 /WWW
1 /srv
38 /etc
2544 /home
27338 /data
1 /mnt
214 /boot
4115 /usr
1 /lost+found
95687 /
OK,發現/var目錄占用最多,于是就懷疑是日志檔案的問題,因為系統日志都在/var目錄下。接着進入/var/log目錄,執行指令确定一下:
1ll -h
果然,全部都是日志檔案占用的空間:
1
2
3
4
5-rw------- 1 root root 6.8G Oct 10 11:22 messages
-rw------- 1 root root 7.9G Sep 15 03:33 messages-20190915
-rw------- 1 root root 9.9G Sep 22 03:37 messages-20190922
-rw------- 1 root root 11G Sep 29 03:11 messages-20190929
-rw------- 1 root root 11G Oct 6 03:49 messages-20191006
也可以執行指令檢視目錄所占的空間:
1du -sh *
伺服器一共就100G的存儲空間,卻被這些日志檔案占去了一大半,檢視了一下内容,發現大部分都是伺服器上的定時任務的資訊,因為定時任務非常頻繁,而且列印的資訊量比較大,看着這塊要優化一下了。
先把這些日志删除一下,保證服務正常:
1rm messages*
删除後,啟動伺服器,一切終于正常了!