記一次生產事故--磁碟被占滿

来源:https://www.cnblogs.com/gcdd/archive/2020/02/10/12292422.html
-Advertisement-
Play Games

寫在前面 今天,跑在阿裡雲ECS上的生產環境,突然間訪問異常,介面各種報錯,無奈公司沒有專業的運維人員,只能硬著頭皮解決一下。 問題排查 先從錶面看起,資料庫首先報錯 直觀上看,設備沒有可用空間,也就是磁碟滿了。 進入伺服器後臺,執行 發現確實磁碟滿了,而且滿的很徹底。系統盤占用100%,估計什麼服 ...


寫在前面

今天,跑在阿裡雲ECS上的生產環境,突然間訪問異常,介面各種報錯,無奈公司沒有專業的運維人員,只能硬著頭皮解決一下。

問題排查

先從錶面看起,資料庫首先報錯

Caused by: org.postgresql.util.PSQLException: ERROR: could not extend file "base/16385/16587_fsm": No space left on device
  建議:Check free disk space.

直觀上看,設備沒有可用空間,也就是磁碟滿了。

進入伺服器後臺,執行

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
udev                  7.9G     0  7.9G   0% /dev
tmpfs                 1.6G  3.5M  1.6G   1% /run
/dev/vda1              59G   56G     0 100% /
tmpfs                 7.9G  4.0K  7.9G   1% /dev/shm
tmpfs                 5.0M  4.0K  5.0M   1% /run/lock
tmpfs                 7.9G     0  7.9G   0% /sys/fs/cgroup
/dev/mapper/vg0-vol0 1000G   14G  937G   2% /data
tmpfs                 1.6G     0  1.6G   0% /run/user/0

發現確實磁碟滿了,而且滿的很徹底。系統盤占用100%,估計什麼服務都跑不動了。/dev/vda1 59G 56G 0 100% /

不過發現/dev/mapper/vg0-vol0 1000G 14G 937G 2% /data,1000G只用了2%

阿裡雲ECS分為系統盤和數據盤,1000G的是數據盤

第一反應,應該是搭建的PG資料庫的數據沒有移到數據盤上。

將Postgres資料庫數據目錄移動到系統盤

參考如何將PostgreSQL數據目錄移動到Ubuntu 16.04上的新位置

$ sudo -u postgres psql
postgres# SHOW data_directory; # 查看當前數據目錄
        data_directory        
------------------------------
 /var/lib/postgresql/9.5/main
(1 row)
postgres# \q; # 退出
# 為了確保數據的完整性,我們將在實際更改數據目錄之前關閉PostgreSQL
$ sudo systemctl stop postgresql
# 確保關閉完成
$ sudo systemctl status postgresql
. . .
Jul 22 16:22:44 ubuntu-512mb-nyc1-01 systemd[1]: Stopped PostgreSQL RDBMS.
$ sudo rsync -av /var/lib/postgresql /data # /data為要遷移到的新目錄
$ cd /data
$ ls
... postgresql
# 刪除原數據目錄
$ sudo rm -rf /var/lib/postgresql
# 將新數據目錄鏈接到原數據目錄
$ sudo ln -s /data/postgresql /var/lib/postgresql
# 重啟Postgres資料庫
$ sudo systemctl start postgresql
$ sudo systemctl status postgresql

完成以上步驟,即將postgre資料庫數據目錄移到了阿裡雲數據盤

以為OK了,執行

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
udev                  7.9G     0  7.9G   0% /dev
tmpfs                 1.6G  3.5M  1.6G   1% /run
/dev/vda1              59G   56G   51M 100% /
tmpfs                 7.9G  4.0K  7.9G   1% /dev/shm
tmpfs                 5.0M  4.0K  5.0M   1% /run/lock
tmpfs                 7.9G     0  7.9G   0% /sys/fs/cgroup
/dev/mapper/vg0-vol0 1000G   14G  937G   2% /data
tmpfs                 1.6G     0  1.6G   0% /run/user/0

紋絲未動。。。

Ubuntu查詢大文件

猜測是存在大文件導致磁碟被占滿

$ cd /
$ find . -type f -size +800M  -print0 | xargs -0 du -h
5.6G ./var/log/syslog.1
6.7G ./var/log/syslog
...
$ rm ...

如果發現是log字眼的大文件,我們可以毫不留情的刪掉,要是遇見一些不認識的,不要貿然刪掉,一定要查清楚文件的作用,能刪則刪,千萬不要不小心刪庫跑路。。。

刪除完畢後,再次查看

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
udev                  7.9G     0  7.9G   0% /dev
tmpfs                 1.6G  3.4M  1.6G   1% /run
/dev/vda1              59G   45G   12G  80% /
tmpfs                 7.9G  4.0K  7.9G   1% /dev/shm
tmpfs                 5.0M  4.0K  5.0M   1% /run/lock
tmpfs                 7.9G     0  7.9G   0% /sys/fs/cgroup
/dev/mapper/vg0-vol0 1000G   14G  936G   2% /data
tmpfs                 1.6G     0  1.6G   0% /run/user/0

多出了12G。

查看已刪除空間卻沒有釋放的進程

這時候,服務應該可以恢覆成功。但你馬上會發現,磁碟又被占滿,而這次,日誌文件卻不算大。

查看已經刪除的文件,空間有沒有釋放,沒有的話kill掉pid

使用rm刪除文件的時候,雖然文件已經被刪除,但是由於文件被其他進程占用,空間卻沒有釋放

$ sudo lsof -n |grep deleted
java      17866                  root  237r      REG              253,1    163541    1709285 /tmp/tomcat.8250394289784312179.8080/work/Tomcat/localhost/ROOT/upload_c6db0c17_6e6a_4141_bfb6_ac1b2d8a3b0b_00000000.tmp (deleted)
...
$ sudo kill -9 17866

再次使用df -h命令,磁碟使用率一下子減少了好多。

總結

  • 伺服器系統盤被占滿是非常可怕的!屆時,一切服務都將變得不可用,業務系統也會莫名其妙多出奇怪的問題。所以,運維需要經常性的查看伺服器磁碟占用情況,阿裡雲ECS用戶,可以開啟報警,及時發現問題,解決問題!

  • 阿裡雲ECS提供了系統盤和數據盤,記住,例如Pg、Redis、Cassandra等容易占磁碟的服務,一定要將數據目錄放在阿裡雲ECS提供的數據盤上。

  • /var/log是系統日誌目錄,可以經常性的關註下,大容量日誌儘早刪除。

  • 對待進程不停對文件寫日誌的操作,要釋放文件占用的磁碟空間,最好的方法是線上清空這個文件,可以通過如下命令完成:
[root@localhost ~]# echo "" >/var/log/syslog

通過這種方法,磁碟空間不但可以馬上釋放,也可保障進程繼續向文件寫入日誌,這種方法經常用於線上清理Apache、Tomcat、Nginx等Web服務產生的日誌文件。

最後,有一個專業的運維是多麼重要!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一、瞭解記憶體空間 本文章文字有點多,會有點枯燥,配合圖文一起看可以緩解枯燥,耐心閱讀哦!!! 先瞭解記憶體地址,才更好的理解指針! 我們可以把記憶體想象為成一列很長很長的貨運火車,有很多大小相同的車廂,而每個車廂正好相當於在記憶體中表示一個位元組。這些車廂裝著不同的貨物,就像我們的記憶體要存著各式各樣的數據 ...
  • WPF允許在代碼中以及在標記中的各個位置定義資源(和特定的控制項、視窗一起定義,或在整個應用程式中定義)。 資源具有許多重要的優點,如下所述: 高效。可以通過資源定義對象,併在標記中的多個地方使用。這會精簡代碼,使其更加高效。 可維護性。可通過資源使用低級的格式化細節(如字型大小),並將它們移到便於對其進 ...
  • 前言 之前的博客我已經在Linux上部署好了.NetCore站點且通過Supervisor對站點進行了進程守護,同時也安裝好了Nginx。Nginx的用處非常大,還是簡單說下,它最大的功能就是方便我們做後續的橫向拓展,當站點的流量越來越大時候可以進行負載均衡,反向代理最大用處也是如此。 反向代理反向 ...
  • 前面兩章介紹了命令的基本內容,可考慮一些更複雜的實現了。接下來介紹如何使用自己的命令,根據目標以不同方式處理相同的命令以及使用命令參數,還將討論如何支持基本的撤銷特性。 一、自定義命令 在5個命令類(ApplicationCommands、NavigationCommands、EditingComm ...
  • WPF中使用第三方控制項來直接進行錄像的控制項沒有找到(aforgenet好像不維護了?WPFMediaKit好像只能實現攝像頭拍照。收費的控制項沒有使用,不做評論。) 通過百度(感謝:https://www.cnblogs.com/giserlong88/p/11244779.html),確定了可以通過 ...
  • 8.軟體 RPM包安裝 8.1rpm安裝 rpm[選項]軟體包名稱 主選項 i 安裝 e卸載 U升級 q查找 輔助選項 ⅴ顯示過程 h hash 查詢 a all查詢所有安裝的包 f file查詢擁有 sr0 [root@MiWiFi R3L srv etc] cd /etc/yum.repos.d ...
  • linux 系統服務入門 ,詳解如何運用systemctl 和xinetd 來進行Linux服務的操作。 ...
  • 鼠年春節,大家都在時刻關心 2019nCoV 疫情發展,沒太多心思搞技術,就在這個時候,ARM 不聲不響搞了個大新聞,如果你登錄 ARM developer 網站,會發現 Cortex-M 家族多了一個新成員:Cortex-M55 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...