Lintas memposting referensi saya dari SO Documentation beta yang sedang offline.
Pembuatan profil dengan XDebug
Perpanjangan ke PHP yang disebut Xdebug tersedia untuk membantu dalam pembuatan profil aplikasi PHP , serta debugging runtime. Saat menjalankan profiler, output ditulis ke file dalam format biner yang disebut "cachegrind". Aplikasi tersedia di setiap platform untuk menganalisis file-file ini. Tidak ada perubahan kode aplikasi yang diperlukan untuk melakukan profil ini.
Untuk mengaktifkan profil, instal ekstensi dan sesuaikan pengaturan php.ini. Beberapa distribusi Linux datang dengan paket standar (mis. php-xdebug
Paket Ubuntu ). Dalam contoh kami, kami akan menjalankan profil secara opsional berdasarkan parameter permintaan. Ini memungkinkan kami untuk menjaga pengaturan statis dan mengaktifkan profiler hanya sesuai kebutuhan.
# php.ini settings
# Set to 1 to turn it on for every request
xdebug.profiler_enable = 0
# Let's use a GET/POST parameter to turn on the profiler
xdebug.profiler_enable_trigger = 1
# The GET/POST value we will pass; empty for any value
xdebug.profiler_enable_trigger_value = ""
# Output cachegrind files to /tmp so our system cleans them up later
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_output_name = "cachegrind.out.%p"
Selanjutnya gunakan klien web untuk membuat permintaan ke URL aplikasi Anda yang ingin Anda profil, misalnya
http://example.com/article/1?XDEBUG_PROFILE=1
Saat halaman memprosesnya akan menulis ke file dengan nama yang mirip dengan
/tmp/cachegrind.out.12345
Secara default nomor dalam nama file adalah id proses yang menulisnya. Ini dapat dikonfigurasi dengan xdebug.profiler_output_name
pengaturan.
Perhatikan bahwa itu akan menulis satu file untuk setiap permintaan / proses PHP yang dieksekusi. Jadi, misalnya, jika Anda ingin menganalisis posting formulir, satu profil akan ditulis untuk permintaan GET untuk menampilkan formulir HTML. Parameter XDEBUG_PROFILE perlu diteruskan ke permintaan POST berikutnya untuk menganalisis permintaan kedua yang memproses formulir. Karenanya saat membuat profil, kadang-kadang lebih mudah menjalankan curl ke POST suatu formulir secara langsung.
Menganalisa Output
Setelah ditulis, cache profil dapat dibaca oleh aplikasi seperti KCachegrind atau Webgrind . PHPStorm, IDE PHP populer, juga dapat menampilkan data profil ini .
KCachegrind, misalnya, akan menampilkan informasi termasuk:
- Fungsi dijalankan
- Waktu panggilan, baik itu sendiri maupun termasuk panggilan fungsi berikutnya
- Frekuensi setiap fungsi dipanggil
- Grafik panggilan
- Tautan ke kode sumber
Apa yang dicari
Tentunya penyetelan kinerja sangat spesifik untuk setiap kasus penggunaan aplikasi. Secara umum ada baiknya mencari:
- Panggilan berulang ke fungsi yang sama yang tidak Anda harapkan untuk dilihat. Untuk fungsi yang memproses dan meminta data, ini bisa menjadi peluang utama bagi aplikasi Anda untuk melakukan cache.
- Fungsi berjalan lambat. Di mana aplikasi menghabiskan sebagian besar waktunya? hasil terbaik dalam penyetelan kinerja berfokus pada bagian-bagian aplikasi yang paling banyak menghabiskan waktu.
Catatan : Xdebug, dan khususnya fitur profilnya, sangat padat sumber daya dan memperlambat eksekusi PHP. Disarankan untuk tidak menjalankan ini di lingkungan server produksi.