站点运营

站点运营:磁盘與日誌空間自查,別等服務器寫满才發現站点停摆

服務器磁盘寫满往往没有明顯预警,先是日誌寫不進去,接着缓存失效、頁面返回 5xx,蜘蛛訪問连續失敗。本文梳理空間被吃光的常见来源、一套可执行的自查顺序、日誌轮轉與保留策略,以及监控告警的阈值設定,帮助把空間检查變成固定运维動作。

站点运营

站点运营:磁盘與日誌空間自查,別等服務器寫满才發現站点停摆

服務器磁盘寫满是那種平时没人注意、出事却很突然的故障。它不像代碼报错會给出清晰提示,往往先是日誌追加失敗,接着缓存無法落盘,最後資料库拒绝寫入、頁面開始返回 5xx。對搜尋引擎蜘蛛来说,它看到的只是站点持續不可用,抓取节奏會被打乱,恢复之後也需要一段時間才能回到原来的水平。

磁盘寫满後,站点會依次出現什么

空間耗尽可能不是瞬間發生,而是一個逐步恶化的過程,表現往往按下面的顺序出現:

  • 日誌無法追加:排错线索中断,反而更难看清楚發生了什么。
  • 會话與缓存寫入失敗:登入狀態異常、頁面片段讀不到,用戶會看到空内容或舊内容。
  • 資料库轉為只讀或直接崩溃:動態頁面開始大面积返回 5xx 或错誤頁。
  • 静態资源生成失敗:图片、缩略图、導出文件出現 404 或半截文件。
  • 蜘蛛连續抓取失敗:抓取频率下降,恢复後需要重新建立稳定印象。

哪些文件最容易把空間吃光

  • 訪問日誌與错誤日誌:訪問量大、报错多的站点,日誌增長速度常常超出预期。
  • 临时文件與上传缓存:上传中断、任務失敗留下的碎片文件容易長期堆积。
  • 資料库备份與導出文件:本地保留多份全量备份,很快就會占掉几十 GB。
  • 站点自身生成的静態文件:缓存頁面、图片裁剪副本、打包产物可能存在多份重复。
  • 包管理器與系統缓存:依赖缓存、舊内核、舊版本安装包通常可以安全清理。

一次可执行的空間自查

不必等到告警才動手,按下面的顺序走一遍,基本能定位到主要占用者:

  1. 用 df -h 查看每個挂载点的使用率,先找出超過 80% 的分区。
  2. 進入占用最高的目錄,用 du -sh * 逐层缩小范围,不要一上来就删。
  3. 單獨检查日誌目錄,確認是否有單個文件異常膨胀。
  4. 检查資料库資料目錄與备份目錄,区分在线資料與冷备份。
  5. 检查 /tmp 與上传目錄,清理長期未訪問的碎片文件。
  6. 用 df -i 確認 inode 使用情况,避免容量够但索引节点耗尽。

容量够,也可能寫不進去

当站点存在大量小文件时,比如會话文件、缓存碎片、按目錄切分的静態頁,inode 會比磁盘容量更早耗尽。此时 df -h 顯示還有余量,但新建文件已经失敗。把 inode 使用率一並纳入监控,能提前發現這類問题。

刪除之前先確認三件事

  • 文件是否被進程持有:正在寫入的日誌被直接刪除,空間不會立即释放,通常需要重啟進程或改用清空方式處理。
  • 备份是否真的可用:刪除前確認最近一份备份可以恢复,而不是只看到一個文件名。
  • 是否影响回滚:舊版本包、舊静態目錄如果還在回滚窗口内,就不要急着删。

把日誌轮轉和保留策略固定下来

比起定期手工清理,更省心的做法是让轮轉規則自動执行:

  • 按天或按大小切分日誌,同时配置保留份數,超出後自動刪除。
  • 只按天切分不够,配合最大体积限制,防止突發流量把單日日誌寫到很大。
  • 應用日誌分級輸出,生产环境避免長期開啟調试級別。
  • 错誤日誌可以比訪問日誌保留更久,方便回溯抓取失敗和 5xx。
  • 轮轉後確認進程能重新打開日誌文件,否則會出現寫入到已刪除文件的情况。

监控與告警的阈值設定

把磁盘和 inode 同时纳入监控,使用率到 80% 提醒,到 85% 升級為需要處理的事項,留出反應時間。除了容量指标,也可以對寫入失敗的關键字做日誌告警,比如日誌無法打開、缓存目錄不可寫。定期的邮件提醒之外,建议每周固定抽查一次增長趋势,看看哪個目錄在持續變大。

磁盘空間和證书、解析一样,属于會直接影响蜘蛛能否正常訪問的基础項。把它寫進运维日歷,按周看一眼趋势、按月做一次清理复核,比等站点停摆之後再排查要轻松得多。