Jika Anda telah bekerja dengan PHP, Anda mungkin menghadapi situasi di mana Anda menjalankan proses PHP yang tidak berfungsi seperti yang diharapkan. Seringkali ini dapat direproduksi dan dapat diselidiki dalam lingkungan pengembangan dengan Xdebug, atau yang aneh Show Meskipun tidak siap direproduksi, Anda mungkin memiliki alat terhubung yang menghasilkan profil dari lingkungan produksi Anda (mis. g. Tideways, XHProf, Blackfire, NewRelic, dll), memungkinkan Anda menangkap profil yang memungkinkan Anda menentukan apa yang terjadi Bagaimana dengan situasi di mana prosesnya tidak selesai? . Ini hanya terjadi sekali dalam bulan biru, tetapi proses yang macet menumpuk secara halus, menghabiskan kumpulan pekerja PHP-FPM atau utas Apache Anda, menghentikan layanan Anda pada waktu yang paling tidak tepat Di sinilah Anda harus dapat melompat ke proses yang sedang berjalan dan mencari tahu persis di mana proses itu macet Orang tua tapi orang baik Jadi, Anda telah mengidentifikasi proses nakal dan mendapatkan PID-nya. Apa sekarang? Mari kita lihat bagaimana itu dapat membantu kita # strace -s128 -p6720 Jadi, apa yang terjadi di sana? . Mengatur ukuran string maksimum tidak diperlukan tetapi seringkali membuat output lebih mudah dibaca jadi saya cenderung menyertakan opsi secara default saat menjalankan
Ini terlihat seperti yang kita lihat di output Bagaimana itu membantu kita? . Ini mungkin file lokal, koneksi TCP ke database, atau sumber daya lain yang bergantung pada skrip Anda. Ini tidak memberi kita nomor baris untuk dilihat dalam kode PHP kita, tetapi ini masih merupakan titik awal yang berharga untuk menentukan apa yang salah dan harus mengarahkan kita ke arah yang benar Cukup sering Anda akan melihat keluaran di Strace 2. 0
Masukkan Dalam konteks penyelidikan di atas yang kami lakukan di Ini adalah alat yang paling komprehensif untuk menyelidiki proses yang salah yang telah saya gunakan. Jika sebelumnya Anda pernah menggunakan Tunjukkan pada saya jejak tumpukan Kemungkinan Anda bisa mendapatkan cukup jauh dengan orang-orang seperti Jika demikian, maka Anda perlu ________2______8. Ini adalah alat yang cukup baru dan saya menemukan beberapa sisi kasar saat menggunakannya, tetapi hasilnya masih sangat mengesankan. Pada saat penulisan, tidak ada rilis terpaket atau binari untuk diunduh, tetapi proses untuk membangunnya sangat mudah dan didokumentasikan dalam file readme repositori. Ketika saya membangunnya, ia mengeluarkan beberapa peringatan kompilasi, tetapi dengan senang hati dibangun dan dijalankan Setelah Anda membuatnya, cobalah dengan menemukan proses PHP dan menghubungkannya, mis. g. Ini akan mengeluarkan 5 jejak tumpukan yang menunjukkan kepada Anda apa yang dilakukan proses setiap kali diambil sampelnya. Itu pada dasarnya ilmu hitam sejauh yang saya ketahui. Tidak akan pernah lagi sebuah proses macet dengan saya bertanya-tanya apa yang dilakukannya di saat-saat terakhir sebelum saya mengeluarkan Seolah-olah bagian pesta itu tidak cukup, Anda dapat menyalurkan output melalui beberapa skrip perl (dibundel dengan Apa yang kita pelajari? Anda sekarang memiliki pegangan tentang cara menggali proses yang berperilaku aneh, bahkan jika Anda tidak melengkapinya dengan alat pembuatan profil sebelum Anda memulainya. Ini adalah teknik debugging yang berharga yang dapat sampai ke akar penyebab dari proses yang macet. Ke depan, Anda harus dapat menghindari teknik yang menutupi jenis masalah ini, seperti skrip pengawas yang mencari proses yang berjalan lama macet dan memulai ulang. Senang rasanya bisa melaporkan kepada atasan atau klien Anda bahwa Anda telah mengidentifikasi dan memperbaiki masalah, daripada harus bekerja keras setiap kali itu terjadi, tidak mengetahui penyebabnya. Ini benar-benar hanya menggores permukaan informasi yang dapat Anda peroleh kembali dari proses yang sedang berjalan. Ada alat lain untuk diselidiki, seperti Beberapa alat ini mungkin tampak sedikit berlebihan pada awalnya, tetapi ada banyak contoh penggunaan di web. Kemungkinan seseorang telah melakukan apa yang Anda coba lakukan bahkan jika Anda tidak tahu persis argumen apa yang perlu Anda berikan kepada Bagaimana saya tahu jika PHP menjalankan CMD?Cara Memeriksa apakah php berjalan dari cli (baris perintah) . Periksa konstanta STDIN. STDIN adalah konstanta yang ditentukan saat php dijalankan dari baris perintah. . Periksa php_sapi_name. Fungsi php_sapi_name seharusnya mengembalikan "cli" jika skrip dijalankan dari baris perintah. . Periksa konstanta PHP_SAPI Bagaimana Anda memeriksa apakah suatu proses sedang berjalan di Linux dengan pid?Cara termudah untuk mengetahui apakah proses sedang berjalan adalah jalankan perintah ps aux dan nama proses grep . Jika Anda mendapatkan output bersama dengan nama proses/pid, proses Anda sedang berjalan.
Bagaimana cara mendapatkan ID proses di PHP?Lihat Juga ¶ . getmygid() - Dapatkan GID pemilik skrip PHP getmyuid() - Mendapat UID pemilik skrip PHP get_current_user() - Mendapat nama pemilik skrip PHP saat ini getmyinode() - Mendapat inode dari skrip saat ini getlastmod() - Mendapatkan waktu modifikasi halaman terakhir |