服務器磁盘寫满是那種平时没人注意、出事却很突然的故障。它不像代碼报错會给出清晰提示,往往先是日誌追加失敗,接着缓存無法落盘,最後資料库拒绝寫入、頁面開始返回 5xx。對搜尋引擎蜘蛛来说,它看到的只是站点持續不可用,抓取节奏會被打乱,恢复之後也需要一段時間才能回到原来的水平。
磁盘寫满後,站点會依次出現什么
空間耗尽可能不是瞬間發生,而是一個逐步恶化的過程,表現往往按下面的顺序出現:
- 日誌無法追加:排错线索中断,反而更难看清楚發生了什么。
- 會话與缓存寫入失敗:登入狀態異常、頁面片段讀不到,用戶會看到空内容或舊内容。
- 資料库轉為只讀或直接崩溃:動態頁面開始大面积返回 5xx 或错誤頁。
- 静態资源生成失敗:图片、缩略图、導出文件出現 404 或半截文件。
- 蜘蛛连續抓取失敗:抓取频率下降,恢复後需要重新建立稳定印象。
哪些文件最容易把空間吃光
- 訪問日誌與错誤日誌:訪問量大、报错多的站点,日誌增長速度常常超出预期。
- 临时文件與上传缓存:上传中断、任務失敗留下的碎片文件容易長期堆积。
- 資料库备份與導出文件:本地保留多份全量备份,很快就會占掉几十 GB。
- 站点自身生成的静態文件:缓存頁面、图片裁剪副本、打包产物可能存在多份重复。
- 包管理器與系統缓存:依赖缓存、舊内核、舊版本安装包通常可以安全清理。
一次可执行的空間自查
不必等到告警才動手,按下面的顺序走一遍,基本能定位到主要占用者:
- 用 df -h 查看每個挂载点的使用率,先找出超過 80% 的分区。
- 進入占用最高的目錄,用 du -sh * 逐层缩小范围,不要一上来就删。
- 單獨检查日誌目錄,確認是否有單個文件異常膨胀。
- 检查資料库資料目錄與备份目錄,区分在线資料與冷备份。
- 检查 /tmp 與上传目錄,清理長期未訪問的碎片文件。
- 用 df -i 確認 inode 使用情况,避免容量够但索引节点耗尽。
容量够,也可能寫不進去
当站点存在大量小文件时,比如會话文件、缓存碎片、按目錄切分的静態頁,inode 會比磁盘容量更早耗尽。此时 df -h 顯示還有余量,但新建文件已经失敗。把 inode 使用率一並纳入监控,能提前發現這類問题。
刪除之前先確認三件事
- 文件是否被進程持有:正在寫入的日誌被直接刪除,空間不會立即释放,通常需要重啟進程或改用清空方式處理。
- 备份是否真的可用:刪除前確認最近一份备份可以恢复,而不是只看到一個文件名。
- 是否影响回滚:舊版本包、舊静態目錄如果還在回滚窗口内,就不要急着删。
把日誌轮轉和保留策略固定下来
比起定期手工清理,更省心的做法是让轮轉規則自動执行:
- 按天或按大小切分日誌,同时配置保留份數,超出後自動刪除。
- 只按天切分不够,配合最大体积限制,防止突發流量把單日日誌寫到很大。
- 應用日誌分級輸出,生产环境避免長期開啟調试級別。
- 错誤日誌可以比訪問日誌保留更久,方便回溯抓取失敗和 5xx。
- 轮轉後確認進程能重新打開日誌文件,否則會出現寫入到已刪除文件的情况。
监控與告警的阈值設定
把磁盘和 inode 同时纳入监控,使用率到 80% 提醒,到 85% 升級為需要處理的事項,留出反應時間。除了容量指标,也可以對寫入失敗的關键字做日誌告警,比如日誌無法打開、缓存目錄不可寫。定期的邮件提醒之外,建议每周固定抽查一次增長趋势,看看哪個目錄在持續變大。
磁盘空間和證书、解析一样,属于會直接影响蜘蛛能否正常訪問的基础項。把它寫進运维日歷,按周看一眼趋势、按月做一次清理复核,比等站点停摆之後再排查要轻松得多。