切換菜單
切換偏好設定選單
切換個人選單
尚未登入
若您做出任何編輯,會公開您的 IP 位址。

VPS 資源監控基礎與異常排查(CPU/RAM/磁盤/網絡使用及異常檢測)全指南

出自md5.pw
這是此頁面最近一次修訂;沒有已批准修訂。

不知道你平時有沒有遇到這種情況:當你的 VPS 成功開機並部署了幾個 Docker 容器後,網站突然打不開了?SSH 敲擊鍵盤感覺非常卡頓?一鍵腳本執行到一半就卡死報錯了?

大多數時候,這些問題並不是因為你的配置寫錯了,而是伺服器的硬件資源(CPU、內存、磁盤、網絡)耗盡了。

我們購買的這種 linux 伺服器是沒有顯示器的,它無法像 Windows 電腦那樣彈出一個「內存不足」的警告框。作為一個合格的 VPS 用戶,你必須學會使用命令行工具,查看這台機器的內部運行狀態。這篇文章將用最直白的操作和命令,教你如何建立一套完整的資源監控與排錯邏輯。


一、 監控利器準備:安裝必備工具包

大多數純淨版的 Linux 系統只自帶了最基礎的 top 命令,界面簡陋且不直觀。在開始排查之前,我們先安裝一套現代化的資源監控工具包。

通過 SSH 連接到你的伺服器,執行以下命令(以 Ubuntu/Debian 為例):

apt update
apt install htop iotop nethogs nload vnstat -y

這五個軟件分別對應了:綜合資源看板、磁盤 I/O 監控、進程網絡監控、實時網速看板、歷史流量統計。接下來,我們將逐一使用它們。


二、 CPU 監控與異常排查

CPU 是伺服器的大腦。如果 CPU 長期滿載,系統所有的響應都會變慢。

1. 使用 htop 查看全局狀態

在終端輸入 htop 並回車。

你會看到一個彩色的交互式界面。屏幕左上角的橫條代表了你的 CPU 核心數(例如 01 代表雙核)。橫條內部不同顏色的填充代表了不同的 CPU 消耗類型。

2. 核心指標解析:Load Average(平均負載)

htop 界面的右上角,或者直接在終端輸入 uptime 命令,你會看到三個數字,比如: Load average: 1.25 0.80 0.50

這三個數字分別代表系統在 過去 1 分鐘、5 分鐘、15 分鐘 的平均負載。

  • 如何判斷是否過載? 負載的健康閾值取決於你的 CPU 核心數。如果你的 VPS 是 1 核,那麼負載達到 1.0 就說明 CPU 已經滿負荷運轉了;如果是 2 核,負載達到 2.0 才是滿負荷。
  • 異常表現: 如果 1 分鐘的負載高達 5.0,而你的機器只有 1 個核心,說明有大量的任務在排隊等待 CPU 處理,系統現在處於極度卡頓的狀態。

3. CPU 異常情況與排查策略

  • 情況 A:某個陌生進程佔用 100% CPU 在 htop 界面下方是進程列表,按鍵盤的 P 鍵可以按 CPU 佔用率對進程進行排序。如果你發現一個你不認識的名字(比如一段隨機字母的程序)長期佔用 90% 以上的 CPU,極大概率是你的伺服器被黑客入侵,並植入了挖礦木馬。 處理方法: 記錄下該進程的 PID(進程號),選中它並按 F9 鍵,選擇 SIGKILL 強制結束它。隨後必須立刻排查防火牆規則和木馬文件。
  • 情況 B:Steal Time(被竊取的時間)過高 如果你使用傳統的 top 命令,注意觀察 CPU 狀態行中的 %st(Steal Time)指標。 VPS 是多台虛擬伺服器共享一台物理母機的 CPU。如果母機上其他的 VPS 鄰居瘋狂佔用 CPU,導致物理機無法分出算力給你,你的 %st 數值就會飆升(比如大於 10%)。 處理方法: 這是服務商母機超售或鄰居折騰導致的。你自己在系統內無法解決,只能提交工單要求客服協助調查或者更換節點。

三、 RAM (內存) 監控與 OOM 異常

內存耗儘是導致 VPS 突然崩潰、SSH 斷開連接的最頭號元兇。

1. 正確閱讀內存指標

很多新手看到面板上顯示內存快滿了,就非常恐慌。其實 Linux 的內存管理機制和 Windows 完全不同。退出 htop,在終端輸入以下命令:

free -h

屏幕上會輸出類似下面的表格:

               total        used        free      shared  buff/cache   available
Mem:           1.9Gi       400Mi       100Mi        10Mi       1.4Gi       1.3Gi
Swap:             0B          0B          0B
  • total(總內存): 你的 VPS 物理內存總量。
  • used(已使用): 應用程式真正佔用的內存。
  • free(完全空閒): 還沒有被系統觸碰過的內存。(在 Linux 中,free 的數值小是非常正常的)
  • buff/cache(緩存): Linux 系統的原則是「閒置的內存就是浪費」。它會把經常讀取的硬盤文件塞進內存里當緩存,以加快下次讀取速度。當程序真正需要內存時,這部分緩存會立刻釋放。
  • available(可用內存):這是你唯一需要關心的核心指標。 它代表了你的系統目前還能騰出多少內存給新的程序使用。只要 available 還有餘量,系統就完全健康。

2. 內存異常情況與排查策略

  • 異常情況:OOM (Out of Memory) 現象 當 available 內存徹底耗盡,且沒有設置 Swap(虛擬內存)時,Linux 內核為了自保,會觸發 OOM Killer 機制。系統會冷酷無情地直接殺掉那個佔用內存最大的進程。 表現形式:你部署的數據庫突然停了,或者你的監控面板自己退出了,沒有任何錯誤提示。
  • 如何確認是否發生了 OOM? 執行以下命令查看系統底層日誌:
dmesg -T | grep -i 'out of memory'

如果輸出了包含 Killed process 的日誌,說明你的程序確實因為內存不足被系統強殺了。 處理方法: 優化你的程序配置(比如降低數據庫的緩存池大小),或者在系統中添加一部分 Swap 虛擬內存作為緩衝。


四、 磁盤空間與 I/O 監控

磁盤問題通常分為兩類:空間塞滿(沒地方存數據了)和 I/O 擁堵(讀寫速度太慢卡住了)。

1. 查找是誰吃光了硬盤空間

執行基礎命令查看各個分區的總空間使用率:

df -h

如果看到掛載點為 /(根目錄)的使用率達到了 100%,你的系統將會出現各種極其詭異的報錯,比如無法寫入數據庫、Tab 鍵無法自動補全等。

如何揪出佔用空間的大文件? 很多時候是由於 Docker 容器產生的日誌沒有被限制,導致把硬盤撐爆了。使用以下組合命令,可以快速列出當前目錄下最大的幾個文件或文件夾:

cd /
du -sh * | sort -rh | head -10

如果你發現 /var/lib/docker 目錄佔據了幾十 GB,可以清理一下對應的 Docker 日誌。

2. 監控磁盤 I/O 擁堵

有時候你的 CPU 負載很高,但你看 htop 里並沒有程序在佔用 CPU 算力。這通常是因為大量的進程在等待硬盤讀寫數據(I/O Wait)。機械硬盤或劣質的 SSD 很容易出現這個問題。

輸入我們在第一步安裝的命令:

iotop

這就像是一個專門針對硬盤的 htop。你可以清楚地看到當前到底是哪個程序在瘋狂讀取或寫入硬盤。如果長時間有很多程序處於 IO> 狀態,說明硬盤性能已經成為這台 VPS 的瓶頸。


五、 網絡流量監控與異常檢測

搞清楚機器上的流量都去哪兒了,對於購買了「按流量計費」套餐的玩家來說至關重要。

1. 實時網速監控

想知道當前這一秒鐘,伺服器的下載和上傳速度是多少?輸入:

nload

界面上方是入站流量(Incoming,比如你向伺服器上傳文件),下方是出站流量(Outgoing,比如伺服器向外提供網頁訪問)。按 q 鍵退出。

2. 是哪個程序在跑流量?

如果 nload 顯示當前有很高的上傳速度,但你明明沒有在下載東西,這時必須查出「內鬼」。輸入:

nethogs

這個命令會列出具體的進程(如 nginxsshd 甚至某個未知的木馬程序)及其對應的實時發送(SENT)和接收(RECEIVED)速度。直接就能定位到消耗帶寬的源頭。

3. 查看月度總流量消耗

如果你想知道這個月還剩多少流量配額,vnstat 是最好的記錄員(注意:vnstat 安裝後需要等待幾分鐘收集數據才會顯示完整內容)。 直接輸入:

vnstat

它會清晰地列出今天、昨天、以及本月的總接收(rx)、總發送(tx)和總合計(total)流量估算值。

4. 網絡異常檢測:不明的開放端口

如果你懷疑伺服器上運行了來路不明的服務,可以使用以下命令查看當前系統開放了哪些端口,以及對應的程序名:

ss -tunlp

仔細檢查 Local Address:Port 這一列,結合最右側的 Process。除了你熟知的 sshd(SSH服務)、docker-proxy 等,如果出現了未知的程序在監聽端口,請立刻結合前文提到的 UFW 防火牆將其封堵,並排查該進程。


監控資源並不是要你每天盯着終端看,而是讓你在系統出現異常的第一時間,擁有清晰的排查邏輯:先看 CPU 負載是否異常,再查 available 內存是否耗盡,接着排查磁盤空間是否 100%,最後查看網絡流量是否被盜刷。

通過熟練運用 htopfree -hdf -h 和網絡監控組件,你已經掌握了給 Linux 系統「看病」的基本功。