Saya juga mendapatkan masalah yang sama sekitar satu tahun yang lalu saya telah mencoba banyak hal dan terakhir saya telah melakukan beberapa hal hit and run setelah membaca dokumentasi dan masalah saya hilang. Pertama, hal-hal penting yang harus ditetapkan sebagai:
FcgidBusyTimeout 300 [default]
FcgidBusyScanInterval 120 [default]
Tujuan arahan ini adalah untuk menghentikan aplikasi yang hang . Batas waktu default mungkin perlu ditingkatkan untuk aplikasi yang memerlukan waktu lebih lama untuk memproses permintaan. Karena pemeriksaan dilakukan pada interval yang ditentukan oleh FcgidBusyScanInterval
, penanganan permintaan dapat dilanjutkan untuk jangka waktu yang lebih lama
FcgidProcessLifeTime 3600 [default]
Proses aplikasi menganggur yang telah ada lebih dari waktu ini akan dihentikan, jika jumlah proses untuk kelas melebihi FcgidMinProcessesPerClass
.
Pemeriksaan seumur hidup proses ini dilakukan pada frekuensi FcgidIdleScanInterval
yang dikonfigurasi .
FcgidZombieScanInterval 3 [seconds default]
Modul memeriksa aplikasi FastCGI yang keluar pada interval ini. Selama periode waktu ini, aplikasi mungkin ada di tabel proses sebagai zombie (di Unix).
Catatan :Semua opsi di atas Turun atau tambah sesuai dengan waktu atau kebutuhan proses aplikasi Anda atau berlaku untuk vhost tertentu.
Tapi Masalah Saya selesaikan dengan opsi ini:
Opsi di atas telah men-tweak server saya tetapi setelah beberapa waktu kesalahan tampaknya datang lagi tetapi kesalahan tersebut benar-benar teratasi dengan ini:
FcgidOutputBufferSize 65536 [default]
Saya telah mengubahnya menjadi
FcgidOutputBufferSize 0
Ini adalah jumlah maksimum data respons yang akan dibaca modul dari aplikasi FastCGI sebelum mengalirkan data ke klien. Ini akan menghapus data secara instan tidak menunggu untuk memiliki 64KB byte, yang sangat membantu saya untuk menghapus proses lebih cepat.
Masalah lain yang saya dapatkan
jika 500 Kesalahan berasal dari waktu habis Nginx. Perbaikannya:
/etc/nginx/nginx.conf
keepalive_timeout 125;
proxy_read_timeout 125;
proxy_connect_timeout 125;
fastcgi_read_timeout 125;
Kadang-kadang saya akan mendapatkan kesalahan MySQL "server MySQL telah hilang", yang membutuhkan satu tweak lagi:/etc/my.conf
wait_timeout = 120
Kemudian, untuk bersenang-senang, saya melanjutkan dan menaikkan batas memori PHP saya, untuk berjaga-jaga:/etc/php.ini
memory_limit = 256M
Menggunakan SuExec
mod_fastcgi
tidak berfungsi sama sekali di bawah SuExec
pada Apache 2.x
. Saya tidak punya apa-apa selain masalah darinya (itu juga memiliki banyak masalah lain dalam pengujian kami). Penyebab sebenarnya dari masalah Anda adalah SuExec
Dalam kasus saya itu adalah startup untuk saya, saya memulai Apache, mod_fcgid memunculkan tepat 5 proses untuk setiap vhost. Sekarang, saat menggunakan skrip unggahan sederhana dan mengirimkan file yang lebih besar dari 4-8KB, semua proses anak tersebut dimatikan sekaligus untuk vhost tertentu tempat skrip dijalankan.
Dimungkinkan untuk membuat build debug atau mengaktifkan login di mod_fcgid yang mungkin memberikan petunjuk.
Saya mencoba mod_fastcgi sementara itu selama 1 tahun dan saya juga dapat mengatakan dengan banyak orang lain bahwa SuExec hanyalah menyusahkan dan berjalan tidak lancar sama sekali, dalam segala hal.
Peringatan itu tidak ada hubungannya dengan Fcgidxxx
opsi dan hanya disebabkan oleh penutupan sisi koneksi klien sebelum server mendapat kesempatan untuk merespons.
Dari sumber sebenarnya:
/* Now pass any remaining response body data to output filters */
if ((rv = ap_pass_brigade(r->output_filters, brigade_stdout)) != APR_SUCCESS) {
if (!APR_STATUS_IS_ECONNABORTED(rv)) {
ap_log_rerror(APLOG_MARK, APLOG_WARNING, rv, r,
"mod_fcgid: ap_pass_brigade failed in "
"handle_request_ipc function");
}
return HTTP_INTERNAL_SERVER_ERROR;
}
Penghargaan diberikan kepada Blog Avian yang mengetahuinya.