XHProf 分析資料的圖形介面,可以將結果儲存在 MongoDB 或 PDO 資料庫中。
對應用程式進行分析,並將分析數據傳輸到 XHGui,XHGui 獲取該信息,將其保存在 MongoDB(或 PDO 資料庫)中,並提供一個方便的 GUI 來使用它。
該專案是用於顯示分析結果的 GUI,要分析您的應用程序,請使用特定的最小庫:
XHGui 有以下要求:
如果您需要決定使用哪個後端,您可以檢查相容性矩陣每個後端實現或缺少哪些功能。
預設安裝使用 MongoDB 資料庫。大多數文件都涉及 MongoDB。
pecl install mongodb
XHGui 需要版本 1.3.0 或更高版本。任何驅動程式和隨附的資料庫:
注意:PDO 可能不支援 XHGui 的所有功能,請參閱#320。
從 GitHub 複製或下載xhgui
。
將您的網頁伺服器指向webroot
目錄。
設定cache
目錄的權限以允許網路伺服器建立檔案。如果你懶的話, 0777
也可以。
以下命令更改cache
目錄的權限:
chmod -R 0777 cache
啟動 MongoDB 實例。 XHGui 使用 MongoDB 實例來儲存分析資料。
如果您的 MongoDB 設定使用身份驗證,或未在預設連接埠和本機主機上執行,請更新 XHGui 的config/config.php
以便 XHGui 可以連接到您的mongod
實例。
(可選,但建議)向 MongoDB 添加索引以提高效能。
XHGui 將分析資訊儲存在 MongoDB 中xhprof
資料庫的results
集合中。新增索引可以提高效能,讓您更快地導航頁面。
若要新增索引,請從命令提示字元開啟mongo
shell。然後,使用MongoDB的db.collection.ensureIndex()
方法新增索引,如下所示:
$ mongo
> use xhprof
> db.results.ensureIndex( { 'meta.SERVER.REQUEST_TIME' : -1 } )
> db.results.ensureIndex( { 'profile.main().wt' : -1 } )
> db.results.ensureIndex( { 'profile.main().mu' : -1 } )
> db.results.ensureIndex( { 'profile.main().cpu' : -1 } )
> db.results.ensureIndex( { 'meta.url' : 1 } )
> db.results.ensureIndex( { 'meta.simple_url' : 1 } )
> db.results.ensureIndex( { 'meta.SERVER.SERVER_NAME' : 1 } )
使用 Composer 安裝依賴項
composer install --no-dev
設定您的網頁伺服器。下面的設定部分描述如何為 nginx 和 apache 設定重寫規則。
此設定使用 docker-compose 來編排 docker 容器。
從 GitHub 複製或下載xhgui
。
啟動容器: docker-compose up -d
開啟瀏覽器 http://xhgui.127.0.0.1.xip.io:8142 或 http://localhost:8142 或在 Terminal composer open
中輸入
若要自訂 xhgui,請將config/config.default.php
複製到config/config.php
並編輯該檔案。
若要自訂 docker-compose,請將docker-compose.yml
複製到docker-compose.override.yml
並編輯該檔案。
XHGui 喜歡啟用 URL 重寫,但在沒有它的情況下也能運作。對於 Apache,您可以執行以下操作來啟用 URL 重寫:
確保允許 .htaccess 覆蓋,並且 AllowOverride 已為正確的 DocumentRoot 設定了指令 FileInfo。
Apache 2.4 的設定範例:
< Directory /var/www/xhgui/>
Options Indexes FollowSymLinks
AllowOverride FileInfo
Require all granted
</ Directory >
確保正確載入 mod_rewrite。您應該會看到類似以下內容:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
XHGui 附帶一個.htaccess
檔案來啟用其餘的重寫規則。
對於 nginx 和 fast-cgi,您可以使用以下程式碼片段作為開始:
server {
listen 80 ;
server_name example.com;
# root directive should be global
root /var/www/example.com/public/xhgui/webroot/;
index index.php;
location / {
try_files $uri $uri / /index.php? $args ;
}
location ~ .php$ {
try_files $uri =404 ;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ;
}
}
支援的分析應用程式的方法是使用 perftools/php-profiler 套件。
您可以使用該套件從 Web 應用程式或 CLI 腳本收集資料。
然後,該數據被推送到 XHGui 資料庫中,可以使用 XHGui 應用程式查看。
請求結束時分析完成後, php-profiler
套件可以將資料直接提交到 XHGui 實例。
如果應用程式無法直接連接到 XHGui 實例,則該套件提供了將分析資料擷取到檔案中的解決方案,您可以稍後使用匯入腳本匯入該檔案。
警告:匯入同一檔案兩次將建立重複的設定檔。
磁碟使用量可能會快速成長,尤其是在分析具有大型程式碼庫或使用較大框架的應用程式時。
為了控製成長,可以透過建立 TTL 索引將 MongoDB 配置為在分析文件達到一定期限後自動刪除它們。
確定設定檔的最大期限(以秒為單位):您可能希望在開發(您配置所有內容)中選擇比生產(您僅配置部分文件)更低的值。以下命令指示 Mongo 刪除超過 5 天(432000 秒)的文件。
$ mongo
> use xhprof
> db.results.ensureIndex( { "meta.request_ts" : 1 }, { expireAfterSeconds : 432000 } )
XHGui 瀑布顯示的目標是認識到並發請求可以相互影響。並發資料庫請求、CPU 密集型活動甚至會話檔案鎖定都可能變得相關。對於 Ajax 密集型應用程序,理解頁面構建比單次加載要複雜得多:希望瀑布可以提供幫助。請記住,如果您只是分析請求的樣本,瀑布會給您充滿不禮貌的謊言。
一些注意事項:
request_ts_micro
值的存儲,因為二級粒度不適用於瀑布。適用於監控服務運作狀況的 Prometheus 指標公開在/metrics
上。 (目前僅在使用 PDO 進行儲存時才有效。)
特徵 | MongoDB | 磷酸二氫鉀 |
---|---|---|
普羅米修斯出口商 | 第305章 | |
搜尋者::最新() | ||
搜尋器::查詢() | 第384章 | |
搜尋者::get() | ||
搜尋者::getForUrl() | 第436章 | |
搜尋者::getPercentileForUrl() | 第436章 | |
搜尋者::getAvgsForUrl() | 第384章 | |
搜尋者::getAll(排序) | 第436章 | |
搜尋者::getAll(方向) | 第436章 | |
搜尋者::刪除() | ||
搜尋器::截斷() | ||
搜尋者::saveWatch() | 第435章 | |
搜尋者::getAllWatches() | 第435章 | |
搜尋者::truncateWatches() | 第435章 | |
搜尋者::統計資料() | 第305章 | |
搜尋者::getAllServerNames() | 第460章 |
請參閱版本以取得變更日誌和版本資訊。
版權所有 (c) 2013 馬克‧斯托里 (Mark Story) 與保羅‧賴因海默 (Paul Reinheimer)
特此免費授予任何獲得本軟體和相關文件文件(「軟體」)副本的人不受限制地使用本軟體,包括但不限於使用、複製、修改、合併的權利、發布、分發、再授權和/或銷售軟體的副本,並允許向其提供軟體的人員這樣做,但須滿足以下條件:
上述版權聲明和本授權聲明應包含在本軟體的所有副本或主要部分中。
本軟體以「現況」提供,不提供任何明示或暗示的保證,包括但不限於適銷性、特定用途的適用性和不侵權的保證。 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE軟體.