項目中出現的問題
某天下午測試環境服務器出現tab無法補全命令,給出的提示大概意思就是說,無可用空間無法創建臨時文件,不過這次跟上次出現的問題比較像,上次服務器出現的問題,因此樓主判斷可能是服務器數據盤被占滿,果不其然,使用df -h
命令看到服務器數據盤出現100%被占用的情況。
問題排查過程
樓主首先想到的是可以看到,linux系統中占用數據盤最大的文件,常情況下,最有可能找出占用磁盤空間文件或文件夾的地方,主要是 /tmp or /var or /home or /
。
目前沒有單個命令來完成查找的工作,通常可以使用一些命令的組合來幫助您找出磁盤上比較占用空間的文件或者文件夾。主要用到下面的三個命令:
- du : 計算出單個文件或者文件夾的磁盤空間占用.
- sort : 對文件行或者標準輸出行記錄排序后輸出.
- head : 輸出文件內容的前面部分.
用下面的命令組合就可以完成上述查找工作:
du -h / | sort -n -r | head -n 10
上述命令的含義就是查找/
目錄下按照大小排序占用磁盤空間最大的10個文件。
如果需要輸出可讀性更高的內容,請使用如下命令:
du -hsx * | sort -rh | head -10
ok,到此為止問題華華麗麗的解決了,很開心哦。
分享一個命令的使用
lsof -i
在使用Linux系統的過程中,有時候會遇到端口被占用而導致服務無法啟動的情況。比如HTTP使用80端口,但當啟動Nginx時,卻發現此端口正在使用。
這種情況大多數是由于軟件沖突、或者默認端口設置不正確導致的,此時需要查看究竟哪個進程占用了端口,來決定進一步的處理方法。
一般情況下查看某一端口的占用情況的用法是: lsof -i:端口號
例如查看80端口的使用情況
lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 7464 root 272u IPv6 7111192 0t0 TCP 192.168.201.8:45616->192.168.201.8:http (CLOSE_WAIT)
nginx 7555 root 7u IPv4 7110265 0t0 TCP *:http (LISTEN)
nginx 7556 nobody 7u IPv4 7110265 0t0 TCP *:http (LISTEN)
java 7573 root 210u IPv6 7110330 0t0 TCP 192.168.201.8:45422->192.168.201.8:http (CLOSE_WAIT)
java 7602 root 140u IPv6 7111090 0t0 TCP 192.168.201.8:45412->192.168.201.8:http (CLOSE_WAIT)
結束該端口的占用可以會用kill pid
的方法。