【前言】
筆者最近有服務器突然停服務了,我登錄服務器嚇了一跳,下一面我們一起回顧一這個驚心動魄故事吧。
首先,使用ssh遠程登錄服務器,請出df大神看看硬盤的使用情況吧
df
Linux df(英文全拼:disk free) 命令用于顯示目前在 Linux 系統上的文件系統磁盤使用情況統計。
一般/dev/vda1為系統盤,像vdb、vdc為數據盤。
我們發現df輸出的格式沒有單位,可讀性太低了。使用-h參數可解決。
-h或–human-readable 以K,M,G為單位,提高信息的可讀性。
我的媽啊,所以居然/dev/vda1為系統盤100%, 還好能ssh登錄服務器,只是http,mysql,java應用服務崩潰了。
是哪個目錄或文件太小了,導致呢?我想到可能是隊友java應用打印的日志,但他布哪個目錄,我不清楚。我們有應用服務一般在/www/wwwroot, 所以我先定位在此目錄。然后請出du命令
du
Linux du (英文全拼:disk usage)命令用于顯示目錄或文件的大小。先看看du
-h:以人類可讀的方式顯示
-a:顯示目錄占用的磁盤空間大小,還要顯示其下目錄和文件占用磁盤空間的大小
-s:顯示目錄占用的磁盤空間大小,不要顯示其下子目錄和文件占用的磁盤空間大小
-c:顯示幾個目錄或文件占用的磁盤空間大小,還要統計它們的總和
--apparent-size:顯示目錄或文件自身的大小
-l :統計硬鏈接占用磁盤空間的大小
-L:統計符號鏈接所指向的文件占用的磁盤空間大小
du -h:這個就不多說了。
du -h
從輸出可以看出du是顯示所有目錄和子目錄所占用的磁盤空間。輸出內容太多太亂了,不方便排查。
可以用下面的參數
–max-depth=<目錄層數>
使用--max-depth=<目錄層數> 超過指定層數的目錄后,就方面排除了。
比如最多顯示1層:
顯示多了不方便查看,太亂多,如果再多點,還很難查到,哪個目錄或文件大,就要用到排序, 請出sort命令。
sort
使用sort命令即可排序。 使用|來分隔不同的命令。
下面說下本文會用到的sort參數: -r(--reverse) 以相反的順序來排序 -h( --human-numeric-sort):使用易讀性數字(例如:2K、1G),默認從小到大排序 -s -s或–summarize 僅顯示總計。只顯示指定目錄或當前目錄的大小。
我們只顯示一層目錄大小并排序,就能很多找出最大的目錄或文件。
這里我們很快知道了哪個目錄占用空間大,直接進入目錄manager
查看一下,發現有一個日志文件,太嚇人了
不知隊友是怎么想的,這么的日志文件,怎么查看呢。打印的是一些什么呢?看日志命名應該是9月20日啟動的服務,才過去幾天啊,就打印了那么多日志,云服務器很貴的,不能這樣玩啊, 而且這個日志文件,根本沒法看啊。
爭得隊友同事,把此文件刪除。下面命令:
rm -f 0920.log
占用硬盤空間仍然
再df -h看一下,占用有硬盤空間依然。怎么回事呢?
雖然刪除了那個文件,但是服務一直占用那個文件,必須要重啟占用應用服務。是哪個服務,我也不知道。
用下面看看是哪個程序在寫0920.log
lsof -n | grep 0920.log
只知道是java應用在寫0920.log,具體服務還是不清楚。
問題臨時解決
用history看看執行過什么命令,果然被我查到了。
如果history沒找到,可以看看開機啟動, 用下面命令:
cat /etc/rc.local 和
ls /etc/init.d
重啟java服務后, 硬盤空間,就釋放了。
但這個方法,治標不治本,過幾天,還是被日志撐滿服務器。還是讓隊友改代碼吧。
總結
應用程序打印日志無可說的, 但這樣打印日志,不可取的。各位看官你們說呢?
審核編輯:劉清
-
Linux系統
+關注
關注
4文章
593瀏覽量
27392 -
SSH
+關注
關注
0文章
188瀏覽量
16335
原文標題:Linux查找大文件、大目錄 - 解決磁盤空間不足的問題
文章出處:【微信號:嵌入式加油站,微信公眾號:嵌入式加油站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論