Antarmuka grafis untuk data pembuatan profil XHProf yang dapat menyimpan hasilnya dalam database MongoDB atau PDO.
Aplikasi diprofilkan dan data pembuatan profil ditransfer ke XHGui, yang mengambil informasi tersebut, menyimpannya di MongoDB (atau database PDO), dan menyediakan GUI yang nyaman untuk bekerja dengannya.
Proyek ini adalah GUI untuk menampilkan hasil pembuatan profil, untuk membuat profil aplikasi Anda, gunakan perpustakaan minimal tertentu:
XHGui memiliki persyaratan berikut:
Jika Anda perlu memutuskan backend mana yang akan digunakan, Anda dapat memeriksa matriks kompatibilitas fitur apa yang diterapkan atau hilang per backend.
Instalasi default menggunakan database MongoDB. Sebagian besar dokumentasi berbicara tentang MongoDB.
pecl install mongodb
XHGui memerlukan versi 1.3.0 atau lebih baru.Salah satu driver dan database yang menyertainya:
CATATAN: PDO mungkin tidak mendukung semua fitur XHGui, lihat #320.
Kloning atau unduh xhgui
dari GitHub.
Arahkan server web Anda ke direktori webroot
.
Tetapkan izin pada direktori cache
untuk mengizinkan server web membuat file. Jika Anda malas, 0777
akan berhasil.
Perintah berikut mengubah izin untuk direktori cache
:
chmod -R 0777 cache
Mulai instans MongoDB. XHGui menggunakan instance MongoDB untuk menyimpan data profil.
Jika pengaturan MongoDB Anda menggunakan autentikasi, atau tidak berjalan pada port default dan localhost, perbarui config/config.php
XHGui sehingga XHGui dapat terhubung ke instance mongod
Anda.
( Opsional , tapi disarankan) Tambahkan indeks ke MongoDB untuk meningkatkan kinerja.
XHGui menyimpan informasi profil dalam kumpulan results
di database xhprof
di MongoDB. Menambahkan indeks akan meningkatkan kinerja, memungkinkan Anda menavigasi halaman lebih cepat.
Untuk menambahkan indeks, buka mongo
shell dari command prompt Anda. Kemudian, gunakan metode db.collection.ensureIndex()
MongoDB untuk menambahkan indeks, seperti berikut ini:
$ 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 } )
Instal dependensi dengan komposer
composer install --no-dev
Siapkan server web Anda. Bagian Konfigurasi di bawah ini menjelaskan cara menyiapkan aturan penulisan ulang untuk nginx dan Apache.
Penyiapan ini menggunakan komposisi buruh pelabuhan untuk mengatur kontainer buruh pelabuhan.
Kloning atau unduh xhgui
dari GitHub.
Memulai kontainer: docker-compose up -d
Buka browser Anda di http://xhgui.127.0.0.1.xip.io:8142 atau cukup http://localhost:8142 atau ketik di terminal composer open
Untuk menyesuaikan xhgui, salin config/config.default.php
ke config/config.php
dan edit file itu.
Untuk menyesuaikan docker-compose, salin docker-compose.yml
ke docker-compose.override.yml
dan edit file tersebut.
XHGui lebih memilih untuk mengaktifkan penulisan ulang URL, tetapi akan berfungsi tanpanya. Untuk Apache, Anda dapat melakukan hal berikut untuk mengaktifkan penulisan ulang URL:
Pastikan bahwa penggantian .htaccess diizinkan dan AllowOverride memiliki direktif FileInfo yang disetel untuk DocumentRoot yang benar.
Contoh konfigurasi untuk Apache 2.4:
< Directory /var/www/xhgui/>
Options Indexes FollowSymLinks
AllowOverride FileInfo
Require all granted
</ Directory >
Pastikan Anda memuat mod_rewrite dengan benar. Anda akan melihat sesuatu seperti:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
XHGui hadir dengan file .htaccess
untuk mengaktifkan aturan penulisan ulang yang tersisa.
Untuk nginx dan fast-cgi, Anda dapat menggunakan cuplikan berikut sebagai permulaan:
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 ;
}
}
Cara yang didukung untuk membuat profil aplikasi adalah dengan menggunakan paket perftools/php-profiler.
Anda dapat menggunakan paket tersebut untuk mengumpulkan data dari aplikasi web atau skrip CLI Anda.
Data ini kemudian dimasukkan ke database XHGui yang dapat dilihat dengan aplikasi XHGui.
Paket php-profiler
menawarkan pengiriman data langsung ke instance XHGui setelah pembuatan profil selesai di akhir permintaan.
Jika aplikasi tidak dapat terhubung langsung ke instance XHGui, paket tersebut menawarkan solusi untuk menangkap data profil ke file yang dapat Anda impor nanti menggunakan skrip impor.
Peringatan : Mengimpor file yang sama dua kali akan membuat profil duplikat.
Penggunaan disk dapat berkembang dengan cepat, terutama saat membuat profil aplikasi dengan basis kode yang besar atau yang menggunakan kerangka kerja yang lebih besar.
Untuk menjaga pertumbuhan tetap terkendali, konfigurasikan MongoDB untuk secara otomatis menghapus dokumen profil setelah mencapai usia tertentu dengan membuat indeks TTL.
Tentukan usia maksimum dokumen profil dalam hitungan detik: Anda mungkin ingin memilih nilai yang lebih rendah dalam pengembangan (di mana Anda membuat profil semuanya), daripada produksi (di mana Anda hanya membuat profil dokumen pilihan). Perintah berikut menginstruksikan Mongo untuk menghapus dokumen yang berumur lebih dari 5 hari (432000 detik).
$ mongo
> use xhprof
> db.results.ensureIndex( { "meta.request_ts" : 1 }, { expireAfterSeconds : 432000 } )
Tujuan dari tampilan air terjun XHGui adalah untuk mengenali bahwa permintaan bersamaan dapat mempengaruhi satu sama lain. Permintaan database secara bersamaan, aktivitas intensif CPU, dan bahkan penguncian file sesi bisa menjadi relevan. Dengan aplikasi berat Ajax, pemahaman pembuatan halaman jauh lebih kompleks daripada pemuatan tunggal: semoga air terjun dapat membantu. Ingat, jika Anda hanya membuat profil sampel permintaan, air terjun tersebut akan memenuhi Anda dengan kebohongan yang tidak sopan.
Beberapa Catatan:
request_ts_micro
baru, karena perincian tingkat kedua tidak berfungsi dengan baik dengan air terjun. Metrik Prometheus yang cocok untuk memantau kesehatan layanan ditampilkan di /metrics
. (Saat ini ini hanya berfungsi jika menggunakan PDO untuk penyimpanan.)
Fitur | MongoDB | PDO |
---|---|---|
Eksportir Prometheus | #305 | |
Penelusur::terbaru() | ||
Penelusur::kueri() | #384 | |
Penelusur::dapatkan() | ||
Penelusur::getForUrl() | #436 | |
Penelusur::getPercentileForUrl() | #436 | |
Penelusur::getAvgsForUrl() | #384 | |
Penelusur::getAll(sortir) | #436 | |
Penelusur::getAll(arah) | #436 | |
Penelusur::hapus() | ||
Penelusur::truncate() | ||
Penelusur::saveWatch() | #435 | |
Penelusur::getAllWatches() | #435 | |
Penelusur::truncateWatches() | #435 | |
Penelusur::statistik() | #305 | |
Penelusur::getAllServerNames() | #460 |
Lihat rilis untuk log perubahan, dan informasi rilis.
Hak Cipta (c) 2013 Mark Story & Paul Reinheimer
Izin dengan ini diberikan, secara gratis, kepada siapa pun yang memperoleh salinan perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk menggunakan Perangkat Lunak tanpa batasan, termasuk tanpa batasan hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , mempublikasikan, mendistribusikan, mensublisensikan, dan/atau menjual salinan Perangkat Lunak, dan mengizinkan orang yang menerima Perangkat Lunak untuk melakukan hal tersebut, dengan tunduk pada ketentuan berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini akan disertakan dalam semua salinan atau sebagian besar Perangkat Lunak.
PERANGKAT LUNAK INI DISEDIAKAN "APA ADANYA", TANPA JAMINAN APA PUN, TERSURAT MAUPUN TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN KELAYAKAN UNTUK DIPERDAGANGKAN, KESESUAIAN UNTUK TUJUAN TERTENTU, DAN TIDAK ADA PELANGGARAN. DALAM KEADAAN APA PUN PENULIS ATAU PEMEGANG HAK CIPTA TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN, ATAU TANGGUNG JAWAB LAINNYA, BAIK DALAM TINDAKAN KONTRAK, HUKUM ATAU LAINNYA, YANG TIMBUL DARI, ATAU SEHUBUNGAN DENGAN PERANGKAT LUNAK ATAU PENGGUNAAN ATAU HAL-HAL LAIN DALAM PERANGKAT LUNAK.