2024 年日本 PHP 研討會

getrusage

(PHP 4, PHP 5, PHP 7, PHP 8)

getrusage取得目前的資源使用情況

說明

getrusage(int $mode = 0): array|false

這是 getrusage(2) 的介面。它會取得系統呼叫所回傳的資料。

參數

mode

如果 mode 為 1,getrusage 將會以 RUSAGE_CHILDREN 呼叫。

回傳值

回傳一個包含系統呼叫所回傳資料的關聯式陣列。所有項目都可以透過它們的文件欄位名稱來存取。失敗時回傳 false

更新日誌

版本 說明
7.0.0 此函式現在於 Windows 上受到支援。

範例

範例 #1 getrusage() 範例

<?php
$dat
= getrusage();
echo
$dat["ru_oublock"]; // 區塊輸出操作次數
echo $dat["ru_inblock"]; // 區塊輸入操作次數
echo $dat["ru_msgsnd"]; // IPC 訊息發送次數
echo $dat["ru_msgrcv"]; // IPC 訊息接收次數
echo $dat["ru_maxrss"]; // 最大駐留集大小
echo $dat["ru_ixrss"]; // 共享記憶體大小積分
echo $dat["ru_idrss"]; // 非共享資料大小積分
echo $dat["ru_minflt"]; // 頁面回收次數(軟頁面錯誤)
echo $dat["ru_majflt"]; // 頁面錯誤次數(硬頁面錯誤)
echo $dat["ru_nsignals"]; // 接收到的訊號數量
echo $dat["ru_nvcsw"]; // 自願性上下文切換次數
echo $dat["ru_nivcsw"]; // 非自願性上下文切換次數
echo $dat["ru_nswap"]; // 交換次數
echo $dat["ru_utime.tv_usec"]; // 使用者時間(微秒)
echo $dat["ru_utime.tv_sec"]; // 使用者時間(秒)
echo $dat["ru_stime.tv_usec"]; // 系統時間(微秒)
echo $dat["ru_stime.tv_sec"]; // 系統時間(秒)
?>

注意事項

備註:

在 Windows 上,getrusage() 只會回傳以下成員

  • "ru_stime.tv_sec"
  • "ru_stime.tv_usec"
  • "ru_utime.tv_sec"
  • "ru_utime.tv_usec"
  • "ru_majflt"(僅當 mode 參數為 RUSAGE_SELF 時)
  • "ru_maxrss"(僅當 mode 參數為 RUSAGE_SELF 時)

如果以 mode 設為 1 (RUSAGE_CHILDREN) 呼叫 getrusage(),則會收集執行緒的資源使用情況(表示在內部以 RUSAGE_THREAD 呼叫該函式)。

備註:

在 BeOS 2000 上,只會回傳以下成員

  • "ru_stime.tv_sec"
  • "ru_stime.tv_usec"
  • "ru_utime.tv_sec"
  • "ru_utime.tv_usec"

另請參閱

  • 您系統上的 getrusage(2) 使用手冊頁面

新增註釋

使用者貢獻的註釋 3 則註釋

jlh at gmx dot ch
7 年前
請注意,此函式會回傳目前處理程序的資源使用情況。在具有長時間執行的 Apache 處理程序,並使用 PHP 執行多個請求的網路環境中,這將會回傳累積的時間,因此不適合用於判斷您使用了多少使用者時間。最好的做法是在開始和結束時各呼叫一次 getrusage(),並計算差異。
Domas Mituzas
16 年前
getrusage() 會回報核心計數器,這些計數器僅在應用程式失去上下文並切換到核心空間時才會更新。例如,在現代 Linux 伺服器核心上,這表示 getrusage() 呼叫會回傳以 10 毫秒為單位的資訊,而桌面核心則為 1 毫秒。

getrusage() 根本無法用於微測量,而 getmicrotime(true) 可能是更有價值的資源。
To Top