GNU/Linux >> Belajar Linux >  >> Linux

PHP dan mod_fcgid:ap_pass_brigade gagal dalam fungsi handle_request_ipc

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.


Linux
  1. Dapatkan Waktu Pengguna Dan Kernel Dari Proses yang Berjalan?

  2. Setup Apache dan Php dengan mod_fcgid di Ubuntu/Debian

  3. Perintah reboot dan shutdown Linux

  1. Jalankan proses dengan output realtime di PHP

  2. Jalankan skrip php sebagai proses daemon

  3. Menjalankan phpmyadmin dan suphp

  1. Proses Substitusi Dan Pipa?

  2. Perbedaan Antara `waktu` Kata dan Perintah yang Dicadangkan Pada Builtin Shell, Fungsi, Saluran Pipa, dan Daftar Perintah?

  3. cap waktu, waktu modifikasi, dan waktu pembuatan file