Saya telah mengalami masalah yang sangat aneh yang saya tidak yakin bagaimana men-debug lebih lanjut. Saya memiliki instance Ubuntu Ubuntu NGINX + PHP5-FPM + APC dan ada situs web yang diinstal di atasnya yang merupakan kerangka kerja PHP yang kompleks. Saat mencoba men-debug masalah, saya mengurangi alurnya: banyak kelas besar disertakan, objek utama dibuat, sesi dimulai, array konfigurasi diambil dari memcached, file XML diambil dari memcached, HTML template disertakan, output dikirim ke klien. Lalu saya menggunakan alat Apa yang terjadi selanjutnya agak aneh.
Kemudian setelah beberapa waktu yang dapat berada di mana saja antara satu detik dan menit, beberapa (biasanya dua) proses php5-fpm tiba-tiba mengkonsumsi semua CPU:
Pada titik ini semuanya macet dan semua permintaan HTTP baru habis. Jika saya menghentikan alat http_load, php5-fpm akan bertahan selama beberapa menit. Cukup menarik jika saya melakukan
Log kesalahan PHP biasanya memiliki ini:
Log kesalahan Nginx dibanjiri dengan entri ini:
Log lambat PHP-FPM tidak menunjukkan sesuatu yang menarik, bertukar tidak pernah terjadi dan saya tidak berhasil mengumpulkan fakta menarik lainnya tentang masalah tersebut. Saya telah melalui banyak iterasi perubahan file konfigurasi, yang terbaru adalah nginx.conf: http://Pastebin.com/uaD56hJF pool.d/www.conf: http://Pastebin.com/mFeeUULC === UPDATE 1 === konfigurasi situs: http://Pastebin.com/qvinVNhB === UPDATE 2 === Juga baru menemukan bahwa
=== UPDATE 3 === Kami punya contoh mikro Amazon EC2 baru untuk berjaga-jaga, untuk mengecualikan kemungkinan masalah perangkat keras. Saya juga menggunakan php-fastcgi sekarang untuk mengecualikan kemungkinan bug fpm. Perbedaan lainnya kecil, saya pikir satu-satunya yang berubah adalah Ubuntu-> Debian. Masalah yang sama masih terjadi kecuali bahwa sekarang server berhasil sedikit pulih setelah detik max_execution_time (dan kemudian berduri lagi). Saya mencoba bermain dengan test.php terpisah dan saya tidak yakin apakah itu masalah yang sama tetapi setidaknya dalam
Jadi penjelasan terbaik dan satu-satunya berikutnya yang dapat saya buat sejauh ini adalah bahwa meskipun APC seharusnya menarik file dari memori, secara internal itu diterapkan dengan cara yang masih menggunakan deskriptor file kapan saja PHP termasuk- s disebut. Dan baik karena itu melepaskan mereka dengan penundaan atau ketika pada saat yang tidak menguntungkan terlalu banyak permintaan tiba pada saat yang sama, sistem menjalankan deskriptor kami dan permintaan HTTP yang baru tiba dengan cepat ditumpuk menjadi antrian yang besar. Saya akan mencoba untuk menguji ini entah bagaimana. |