php5-fpm: sunucu öğleden sonra erişildi.


41

Ben Nginx + php5-fpm var . Web sitem saatte birkaç kez tıkanıyor ve logfile'de aşağıdakileri görüyorum:

UYARI: [pool www] sunucusu pm.max_children ayarına (5) ulaştı, yükseltmeyi düşünün.

/etc/php5/fpm/pool.d/www.conf dosyası aşağıdaki yapılandırmaları içerir:

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

Sunucu: AMD Opteron ™ 3280, Octo-Core, 8x4,4 GHz, 16 GB DIMM (DDR3).

Bu sunucu için www.conf dosyasına hangi numaraları koyacağım hakkında hiçbir fikrim yok. Birine yardım edebilir miyim? Teşekkürler

Yanıtlar:


40

PHP-FPM'inizin ulaşması için birçok olası neden vardır max_children. En yaygın olanları:

  • Müşterilerinizden çok sayıda paralel istek
  • PHP betiklerinin yavaş çalışması
  • Çok düşük ayar max_children

Makinenizin özelliklerine bakarak, çalışan PHP + Nginx'ten başka bir şey olmadığını varsayarak, 5'ten çok daha yüksek ayarlayabileceğinizi düşünüyorum. 8 çekirdeğiniz olduğunu söylüyorsunuz, genellikle Nginx'in PHP'den çok daha az CPU'ya ihtiyacı var, bu yüzden 5 çocuklu Muhtemelen hiçbir zaman hepsini kullanamayacaksınız. PHP komut dosyalarınızın hafıza tüketimine bağlı olarak, genellikle x 2 çekirdek sayısı veya x 4 çekirdek sayısı gibi bir şeye ayarlıyorum .


Bu php sohbet ile tanışma siteleri ve kullanıcılar milyonlarca anlık mesaj gönderir. Geçen gece ~ 300 kullanıcı çevrimiçi olduğunda, netstat -an | grep 80 | wc - komutu neredeyse
400'du

1
Aslında benzer bir arkadaşlık sitem var. Bence kesinlikle daha fazla PHP çocuğuna ihtiyacınız var. Yapılandırmam şöyle: 20k eşzamanlı çevrimiçi kullanıcı, her biri 8 Çekirdekli 12 PHP makinesi, her bir PHP makinesinde 32 çalışan. Bu oldukça iyi çalışıyor. Ayrıca, ne kadar boş belleğinize bakmalısınız, PHP'niz büyük olmadığı sürece, bazılarınız olduğundan şüpheleniyorum. Eğer boş hafıza varsa, neden daha fazla işçi için kullanmıyorsun?
tekrar

@ user1821484 Bu doğru; pm.max_childrenolduğu kadar çok düşük . 1GB RAM'e sahip küçük bir VPS sunucusu için 10 değeri makul; çok daha büyük bir sunucunuz var. Hataları almayı bırakana kadar bu değeri yükseltin, ardından trafikte ani yükselmeler olması durumunda tekrar yükseltin.
Michael Hampton

Cevaplar için teşekkürler. Pm.max_children ayarını 10'a yükselttim ve şimdi bu hatayı almaya başladım: UYARI: [pool www] meşgul görünüyor (pm.start_servers veya pm.min / max_spare_servers) artırmanız gerekebilir, 16 çocuk doğuruyor, 0 var boşta ve toplam 8 çocuk. Biri bana arttırmam gerekenleri önerebilir mi? Teşekkürler.
user1821484

çekirdek x 2 veya çekirdek x 4 bana çok düşük geliyor. Pm.max_children = 48 ile 8 çekirdekli ve 8GB RAM'e sahip bir makinem var ve sunucuyu hala pm.max_children uyarılarına ulaştırıyoruz . Bu makine CPU veya hafıza limitlerine yakın değil. Daha iyi bir yaklaşım, bu ayarı ilgili nginx (veya apache) ayarlarıyla birlikte optimize etmek ve her bir PHP işleminin ne kadar bellek tüketeceğini belirledikten sonra bir değer seçmek olduğunu düşünüyorum.
S. Imp

18

Pm.max_requests değerini (varsayılan olarak yorumlanmıştır) ayarlayarak bu hataların düzeltilmesinde yardımcı olduğunu gördüm. Bu ayar, alt istekler, belirli sayıda istekler yürüttükten sonra yeniden hazırlanmaya zorlar ve kodunuzda veya 3. parti lib'lerinizde herhangi bir yerde bellek sızıntısı varsa yardımcı olabilir.

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

pm.max_requests = 500

13

Bu bağlantı faydalı olabilir - sistemdeki bellek miktarına bağlı olarak alt işlemlerin sayısının nasıl hesaplanacağını açıklar:


7
Bu bağlantı bir kez gittiğinde bu cevap işe yaramaz olacaktır.
miken32

2
Temel olarak, bağlantı diyor ki ... pm.max_children için uygun değer şu şekilde hesaplanabilir: pm.max_children = Web sunucusuna atanan toplam RAM / Max çocuk işlem büyüklüğü
jaywhy13
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.