PHP 和 DTrace 介紹

包括 Solaris,macOS,Oracle Linux 和 BSD 在內(nèi)的很多操作系統(tǒng) 都提供了 DTrace 跟蹤調(diào)試框架,它永遠(yuǎn)可用,并且額外消耗極低。 DTrace 可以跟蹤操作系統(tǒng)行為和用戶程序的執(zhí)行情況。 它可以顯示參數(shù)值,也可以用來分析性能問題。 用戶可以使用 DTrace D 腳本語言創(chuàng)建腳本文件來監(jiān)控探針,進(jìn)而高效分析數(shù)據(jù)指針。

除非用戶使用 DTrace D 腳本激活并監(jiān)控 PHP 探針,否則它并不會運行,所以不會給正常的應(yīng)用執(zhí)行帶來任何性能損耗。 即使 PHP 探針被激活,它的消耗也是非常低的,甚至可以直接在生產(chǎn)系統(tǒng)中使用。

在運行時可以激活 PHP “用戶級靜態(tài)定義跟蹤”(USDT)探針。 舉例說明,如果 D 腳本正在監(jiān)控 PHP function-entry 探針, 那么,每當(dāng) PHP 腳本函數(shù)被調(diào)用的時候,這個探針將被觸發(fā),同時 D 腳本中所關(guān)聯(lián)的動作代碼將被執(zhí)行。 在腳本的動作代碼中,可以打印出諸如函數(shù)所在源文件等信息的探針參數(shù), 也可以記錄諸如函數(shù)執(zhí)行次數(shù)這樣的聚合數(shù)據(jù)。

這里僅描述了 PHP USDT 探針。請參考各操作系統(tǒng)文檔中關(guān)于 DTrace 的部分獲取更多信息, 例如,如何使用 DTrace 跟蹤函數(shù)調(diào)用,如何跟蹤操作系統(tǒng)行為等。 需要注意的是,不同平臺提供的 DTrace 功能并不完全相同。

從 PHP 5.4 開始加入 DTrace 靜態(tài)探針,之前的版本需要使用 ? PECL 擴(kuò)展來實現(xiàn)跟蹤功能。這個擴(kuò)展現(xiàn)在已經(jīng)廢棄。

在某些 Linux 發(fā)行版中,可以使用 SystemTap 工具來監(jiān)控 PHP DTrace 靜態(tài)探針。