當前位置: 首頁> 最新文章列表> getrusage() 返回的數據單位解析

getrusage() 返回的數據單位解析

M66 2025-07-08
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 本文無關的程序部分</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"歡迎閱讀 PHP 技術文章。\n"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>

<hr>

<h1></span><span><span class="hljs-title function_ invoke__">getrusage</span></span><span>() 返回的數據單位解析</h1>

<p>在 PHP 中,<code></span><span><span class="hljs-title function_ invoke__">getrusage</span></span><span>()

這段代碼將輸出類似如下的內容(不同系統可能略有差異):

 
</span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [ru_utime.tv_sec] => </span><span><span class="hljs-number">0</span></span><span>
    [ru_utime.tv_usec] => </span><span><span class="hljs-number">123456</span></span><span>
    [ru_stime.tv_sec] => </span><span><span class="hljs-number">0</span></span><span>
    [ru_stime.tv_usec] => </span><span><span class="hljs-number">7890</span></span><span>
    [ru_maxrss] => </span><span><span class="hljs-number">34560</span></span><span>
    ...
)

2 . 字段及單位說明
  • ru_utime.tv_sec / ru_utime.tv_usec
    表示用戶態CPU 時間,分別以秒和微秒為單位。可將二者相加獲得精確的用戶態耗時。
  • ru_stime.tv_sec / ru_stime.tv_usec
    表示內核態CPU 時間,單位同上。
  • ru_maxrss
    表示進程所使用的最大常駐集大小(Max Resident Set Size)。在Linux 上,單位是KB(千字節);在macOS 上,單位是字節,需要特別留意。
  • ru_ixrss、ru_idrss、ru_isrss
    這幾個字段理論上表示共享內存、未共享數據內存、未共享棧的內存使用量,但通常在現代系統中不可用,返回值為0
  • ru_minflt / ru_majflt
    頁面錯誤(缺頁異常)的次數,單位是“次數”,不是時間。
  • ru_nswap
    進程進行交換的次數,單位也是“次數”。
  • ru_inblock / ru_oublock
    塊輸入/輸出操作的次數(例如文件系統的讀寫),單位是“塊操作的次數”,不是字節。
  • ru_msgsnd / ru_msgrcv
    發送和接收消息的次數,單位是“次”。
  • ru_nsignals
    接收到的信號數量。
  • ru_nvcsw / ru_nivcsw
    自願/非自願上下文切換的次數。

3 . 單位換算示例

假設我們想獲取總的用戶態CPU 時間,可以這樣寫:

 
</span><span><span class="hljs-variable">$usage</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getrusage</span></span><span>();
</span><span><span class="hljs-variable">$user_time</span></span><span> = </span><span><span class="hljs-variable">$usage</span></span><span>[</span><span><span class="hljs-string">"ru_utime.tv_sec"</span></span><span>] + </span><span><span class="hljs-variable">$usage</span></span><span>[</span><span><span class="hljs-string">"ru_utime.tv_usec"</span></span><span>] / </span><span><span class="hljs-number">1e6</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"用戶態耗時: <span class="hljs-subst">{$user_time}</span></span></span><span> 秒\n";

類似地,可對內核態時間執行相同操作,從而獲得進程CPU 使用總時間。

4 . 注意事項
  • 不同操作系統返回的單位可能不同,特別是ru_maxrss字段。
  • 某些字段在特定平台上始終為0 ,這是由於系統實現不支持該數據收集。
  • getrusage()不會告訴你內存峰值的實時數據,更適合用於性能分析,而非資源限制控制。

結語

getrusage()是PHP 提供的一個深入了解腳本資源消耗情況的重要工具。理解其返回值的含義和單位,有助於開發者進行更細緻的性能調優與監控。