首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 獲取 Linux 伺服器狀態資訊的實用代碼範例

     編輯:PHP 相關知識

前言

在開發運維監控系統或後台管理介面時,經常需要即時獲取伺服器的 CPU、記憶體、磁碟使用率以及進程資訊。本文分享一個基於 PHP 封裝的函數,透過呼叫 Linux 系統指令(top、df、date)來獲取伺服器核心效能指標,適合整合至自建監控儀表板或健康檢查 API 中。

核心實現邏輯

函數 get_used_status() 主要執行以下步驟:

  1. 獲取 CPU、記憶體與進程資訊:使用 top -b -n 2 以批次模式輸出兩次採樣(首次採樣數據通常不準),配合 grep 擷取 Cpu、Mem、Tasks 開頭的行。
  2. 解析關鍵指標:將輸出按行分割,再按逗號拆解字段,提取運行中進程數、CPU 使用率、記憶體總量/已用量並換算百分比。
  3. 獲取磁碟使用情況:呼叫 df -lh 列出本地掛載點,正則清理多餘空格後提取可用空間(GB)與使用率百分比。
  4. 記錄檢測時間:透過 date 指令取得當前時間戳。
  5. 返回結構化陣列:包含 cpu_usage、mem_usage、hd_avail、hd_usage、tast_running、detection_time 六個鍵值。

完整代碼範例

function get_used_status() {
    // 1. 獲取 CPU、記憶體、進程資訊
    $fp = popen('top -b -n 2 | grep -E "^(Cpu|Mem|Tasks)"', "r");
    $rs = "";
    while (!feof($fp)) {
        $rs .= fread($fp, 1024);
    }
    pclose($fp);
    $sys_info = explode("\n", $rs);

    // 解析進程、CPU、記憶體行(索引視實際輸出調整)
    $task_info = explode(",", $sys_info[3]);  // 進程
    $cpu_info  = explode(",", $sys_info[4]);  // CPU
    $mem_info  = explode(",", $sys_info[5]);  // 記憶體

    // 運行中進程數
    $task_running = trim(str_replace('running', '', $task_info[1]));

    // CPU 使用率(去除單位字符)
    $cpu_usage = trim(str_replace(['Cpu(s): ', '%us'], '', $cpu_info[0]));

    // 記憶體使用率計算
    $mem_total = (int)str_replace(['Mem: ', 'k total'], '', $mem_info[0]);
    $mem_used  = (int)str_replace('k used', '', $mem_info[1]);
    $mem_usage = round(100 * $mem_used / $mem_total, 2);

    // 2. 磁碟使用率
    $fp = popen('df -lh | grep -E "^(/)"', "r");
    $rs = fread($fp, 1024);
    pclose($fp);
    $rs = preg_replace("/\s{2,}/", ' ', $rs);
    $hd = explode(" ", $rs);
    $hd_avail = str_replace('G', '', $hd[3]);  // 可用空間 (GB)
    $hd_usage = str_replace('%', '', $hd[4]);  // 使用率

    // 3. 檢測時間
    $fp = popen('date +"%Y-%m-%d %H:%M"', "r");
    $detection_time = trim(fread($fp, 1024));
    pclose($fp);

    // 4. 返回結果
    return [
        'cpu_usage'     => $cpu_usage,
        'mem_usage'     => $mem_usage,
        'hd_avail'      => $hd_avail,
        'hd_usage'      => $hd_usage,
        'task_running'  => $task_running,
        'detection_time'=> $detection_time,
    ];
}

使用建議與注意事項

  • 權限要求:PHP 執行身份需具備執行 top、df、date 指令的權限;若在禁用 popen 的環境下,可改用 exec() 或 shell_exec() 並注意過濾輸出。
  • 跨平台差異:top 輸出格式在不同 Linux 發行版(CentOS、Ubuntu、Debian)間可能略有差異,建議先在目標環境測試並調整陣列索引。
  • 效能考量:頻繁呼叫系統指令會產生額外開銷,建議配合快取機制(如 Redis 儲存 5-10 秒)降低系統負載。
  • 擴展性:可進一步整合 /proc/stat、/proc/meminfo 直接讀取核心數據,避免啟動子進程,提升響應速度。

結語

這段代碼提供了一個輕量、無第三方依賴的伺服器狀態獲取方案,適合中小型專案快速接入監控功能。對於大規模叢集環境,建議採用 Prometheus + Node Exporter 等專業監控棧以獲得更豐富的指標與歷史趨勢分析能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved