php5-fpm: server mencapai pm.max_children


41

Saya punya Nginx + php5-fpm . Beberapa kali per jam situs web saya macet dan logfile saya melihat yang berikut:

PERINGATAN: server [pool www] mencapai pengaturan pm.max_children (5), pertimbangkan untuk meningkatkannya.

File /etc/php5/fpm/pool.d/www.conf berisi konfigurasi berikut:

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Server: AMD Opteron â„¢ 3280, Octo-Core, 8x 2,4 GHz, DIMM 16 GB (DDR3).

Saya tidak tahu nomor apa yang harus saya masukkan ke file www.conf untuk server ini. Bisakah saya membantu seseorang? Terima kasih

Jawaban:


40

Ada banyak kemungkinan alasan mengapa PHP-FPM Anda mencapai max_children. Yang paling umum adalah:

  • Banyak permintaan paralel dari klien Anda
  • Eksekusi lambat dari skrip PHP
  • Pengaturan sangat rendah max_children

Melihat spesifikasi mesin Anda, dengan asumsi tidak ada yang lain selain menjalankan PHP + Nginx, saya pikir Anda dapat mengaturnya jauh lebih tinggi dari 5. Anda mengatakan Anda memiliki 8 Cores, biasanya Nginx membutuhkan CPU jauh lebih sedikit daripada PHP, jadi dengan 5 anak-anak Anda mungkin tidak akan pernah bisa menggunakan semuanya. Saya biasanya mengaturnya ke sesuatu seperti jumlah inti x 2 atau jumlah inti x 4 , tergantung pada konsumsi memori skrip PHP Anda.


Ini adalah situs web kencan dengan obrolan php dan pengguna mengirim jutaan pesan instan. Tadi malam ketika saya memiliki ~ 300 pengguna online, perintah netstat -an | grep 80 | wc - hasilnya hampir 400.
user1821484

1
Saya sebenarnya memiliki situs web kencan serupa. Saya pikir Anda pasti membutuhkan lebih banyak anak PHP. Konfigurasi saya adalah sebagai berikut: 20k pengguna online bersamaan, 12 mesin PHP dengan 8 Cores masing-masing, 32 pekerja di masing-masing mesin PHP. Itu bekerja dengan cukup baik. Anda juga harus melihat berapa banyak memori bebas yang Anda miliki, saya kira Anda memiliki beberapa, kecuali PHP Anda besar. Jika Anda memiliki memori bebas, mengapa tidak menggunakannya untuk beberapa pekerja lagi?
ulangan

@ user1821484 Ini benar; pm.max_childrenadalah terlalu rendah . Nilai 10 masuk akal untuk server VPS kecil dengan 1GB RAM; Anda memiliki server yang jauh lebih besar. Naikkan nilai ini sampai Anda berhenti menerima kesalahan, lalu naikkan lagi jika Anda mendapatkan lonjakan lalu lintas.
Michael Hampton

Terima kasih atas jawabannya. Saya meningkatkan pengaturan pm.max_children ke 10 dan sekarang saya mulai mendapatkan kesalahan ini: PERINGATAN: [kumpulan www] tampaknya sibuk (Anda mungkin perlu menambah pm.start_servers, atau pm.min / max_spare_servers), menelurkan 16 anak, ada 0 menganggur, dan total 8 anak. Adakah yang bisa menyarankan saya apa yang perlu saya tingkatkan? Terima kasih.
user1821484

core x 2 atau core x 4 terdengar sangat rendah bagi saya. Saya memiliki mesin dengan 8 core dan 8GB RAM dengan pm.max_children = 48 dan kami masih mendapatkan server mencapai peringatan pm.max_children . Mesin ini jauh dari batas CPU atau memorinya. Pendekatan yang lebih baik saya pikir akan mengoptimalkan pengaturan ini bersama dengan pengaturan nginx (atau apache) yang sesuai dan memilih nilai setelah menentukan berapa banyak memori yang dikonsumsi oleh setiap proses PHP.
S. Imp

19

Saya menemukan bahwa dengan menetapkan nilai pm.max_requests (yang dikomentari secara default) membantu memperbaiki kesalahan ini. Pengaturan ini memaksa permintaan anak untuk respawn setelah mengeksekusi sejumlah permintaan dan dapat membantu jika ada kebocoran memori di suatu tempat dalam kode Anda atau lib pihak ke-3.

Di /etc/php-fpm.d/www.conf :

pm.max_requests = 500

13

Tautan ini mungkin berguna - menjelaskan cara menghitung jumlah proses anak berdasarkan jumlah memori pada sistem:


7
Jawaban ini akan sia-sia begitu tautan itu hilang.
miken32

2
Pada dasarnya, tautan tersebut mengatakan ... Nilai yang sesuai untuk pm.max_children dapat dihitung sebagai: pm.max_children = Total RAM yang didedikasikan untuk server web / Ukuran proses anak maks
jaywhy13
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.