Linux服務(wù)器磁盤空間不足的排查與處理方法
在日常維護(hù) Linux 服務(wù)器時(shí),我們經(jīng)常會(huì)遇到這樣的場(chǎng)景:系統(tǒng)報(bào)錯(cuò)提示“磁盤空間不足”,執(zhí)行 ls -l 看到一長(zhǎng)串?dāng)?shù)字,或者 df -mh 發(fā)現(xiàn)根目錄掛載點(diǎn)進(jìn)度條已經(jīng)變紅(98% 以上)。
今天就以一次真實(shí)的排查過程為例,分享如何科學(xué)地處理大文件與日志。
一、 識(shí)破數(shù)字:ls -l 里的 30482163185 到底有多大?
當(dāng)你執(zhí)行 ls -l 時(shí),文件大小默認(rèn)是以 Byte(字節(jié)) 為單位顯示的。對(duì)于上百億的數(shù)字,肉眼很難直觀判斷。
1. 快速換算公式
計(jì)算機(jī)系統(tǒng)中,單位換算通常遵循 $1024$ 進(jìn)制:
$$30482163185 \text{ B} \div 1024 \div 1024 \div 1024 \approx 28.39 \text{ GiB}$$
也就是說,這個(gè)文件占用了約 28.4 GB 的空間。
2. 懶人必備命令
與其手動(dòng)計(jì)算,不如在執(zhí)行命令時(shí)加個(gè) -h 參數(shù)(human-readable):
ls -lh:直接顯示為29G。du -sh *:查看當(dāng)前目錄下各個(gè)文件/文件夾的總大小。
二、 深度排查:為什么我的根目錄(/)滿了?
很多時(shí)候,我們發(fā)現(xiàn) /opt 或 /var 下有大文件,但并沒有意識(shí)到它們屬于哪個(gè)分區(qū)。
1. 尋找掛載點(diǎn)邏輯
通過 df -mh 命令可以觀察磁盤分布。如果你的輸出顯示 / 分區(qū)大小為 50G,而 /home 分區(qū)有 4.5T,那么:
- 如果
/opt沒有獨(dú)立出現(xiàn)在“掛載點(diǎn)”一列,它就物理屬于根目錄(/)分區(qū)。 - 當(dāng)
/opt下產(chǎn)生一個(gè) 28G 的日志時(shí),僅有 50G 的根目錄就會(huì)迅速告急(使用率直沖 98%)。
2. 空間不平衡的痛
這種“貧富差距”巨大的分區(qū)架構(gòu)(根目錄小、Home 目錄大)在 CentOS 等系統(tǒng)中很常見。最佳實(shí)踐是:將數(shù)據(jù)、日志、大型應(yīng)用安裝在 /home 下,或者在 /home 創(chuàng)建目錄并軟鏈接到根目錄。
三、 治理長(zhǎng)大的 nohup 日志:四種方案
程序運(yùn)行產(chǎn)生的 1.log 越來越大,直接刪掉文件往往無法釋放磁盤(因?yàn)檫M(jìn)程仍持有文件句柄)。我們需要更優(yōu)雅的處理方式:
方案 A:在線清理(急救)
不需要停止程序,直接清空內(nèi)容:
# 推薦方式,將文件置為 0 字節(jié) true > 1.log # 或者 cat /dev/null > 1.log
方案 B:重定向至“富裕”分區(qū)(治本)
既然 /home 有 4.4T 空間,為何不把日志放過去?
# 啟動(dòng)時(shí)指定路徑 nohup ./start.sh > /home/logs/1.log 2>&1 &
方案 C:使用 logrotate(自動(dòng)化)
利用 Linux 自帶的 logrotate 工具進(jìn)行日志滾動(dòng)。創(chuàng)建配置文件 /etc/logrotate.d/myapp:
/opt/app/1.log {
daily
rotate 5
copytruncate # 關(guān)鍵:先復(fù)制再清空,適合 nohup 進(jìn)程
compress
missingok
}方案 D:實(shí)時(shí)切分(進(jìn)階)
利用 rotatelogs 等工具,在產(chǎn)生日志時(shí)就按大小或時(shí)間切分,避免單個(gè)大文件的出現(xiàn)。
四、 總結(jié)
- 多用
-h參數(shù):無論是ls -lh還是df -h,直觀的數(shù)據(jù)能幫你更快決策。 - 警惕根目錄空間:核心系統(tǒng)分區(qū)一旦爆滿,可能導(dǎo)致 SSH 無法登錄、數(shù)據(jù)庫(kù)損壞等嚴(yán)重后果。
- 日志必須治理:任何通過
nohup啟動(dòng)的服務(wù),都必須考慮日志清理或切分策略。
到此這篇關(guān)于Linux服務(wù)器磁盤空間不足的排查與處理方法的文章就介紹到這了,更多相關(guān)Linux磁盤空間不足內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
centos yum php 7.x 無需刪除升級(jí)的方法
下面小編就為大家分享一篇centos yum php 7.x 無需刪除升級(jí)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03
Linux centos7環(huán)境下tomcat安裝教程
這篇文章主要為大家詳細(xì)介紹了Linux centos7環(huán)境下tomcat的安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
JVM上高性能數(shù)據(jù)格式庫(kù)包Apache Arrow入門和架構(gòu)詳解(Gkatziouras)
Apache Arrow是是各種大數(shù)據(jù)工具(包括BigQuery)使用的一種流行格式,它是平面和分層數(shù)據(jù)的存儲(chǔ)格式,今天給大家介紹JVM上高性能數(shù)據(jù)格式庫(kù)包Apache Arrow入門和架構(gòu)介紹,感興趣的朋友一起看看吧2021-05-05
Apache啟動(dòng)提示錯(cuò)誤undefined symbol: libiconv_open解決方法
這篇文章主要介紹了Apache啟動(dòng)提示錯(cuò)誤undefined symbol: libiconv_open解決方法,需要的朋友可以參考下2015-06-06
Linux下設(shè)置防火墻白名單(RHEL 6和CentOS 7)的步驟
下面小編就為大家?guī)硪黄狶inux下設(shè)置防火墻白名單(RHEL 6和CentOS 7)的步驟。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11
CentOS 7.x安裝部署Memcached服務(wù)器的詳細(xì)方法
這篇文章主要介紹了CentOS 7.x安裝部署Memcached服務(wù)器的詳細(xì)步驟,需要的朋友可以參考下2018-01-01
Linux環(huán)境下實(shí)現(xiàn)多進(jìn)程Socket通信功能
在網(wǎng)絡(luò)編程中,服務(wù)器與多個(gè)客戶端之間的通信是一個(gè)常見的需求,本文將介紹如何在Linux環(huán)境下實(shí)現(xiàn)一個(gè)服務(wù)器程序,該程序能夠啟動(dòng)多個(gè)客戶端進(jìn)程,并通過Socket與這些客戶端進(jìn)行通信,需要的朋友可以參考下2025-05-05

