php-fpm.conf önemli parametreler ayrıntılı şekilde açıklanmıştır
pid = run/php-fpm.pid #pid设置, kurulum dizininde var/run/php-fpm.pid'in varsayılan olarak etkinleştirilmesi önerilir
error_log = günlük/php-fpm.log #错误日志, kurulum dizininde varsayılan var/log/php-fpm.log
log_level = bildirim #错误级别. Mevcut seviyeler şunlardır: uyarı, hata, uyarı, uyarı, uyarı, hata ayıkla. Varsayılan: bildirim.
emergency_restart_threshold = 60 emergency_restart_interval = 60'lar #, SIGSEGV veya SIGBUS hatalarına sahip php-cgi işlemlerinin sayısı emergency_restart_interval değerinde emergency_restart_threshold'yi aşarsa, php-fpm ile zarifçe yeniden başlatılacağını gösterir. Bu iki seçenek genellikle varsayılan olarak kalır.
process_control_timeout = 0 #设置子进程接受主进程复用信号的超时时间. Mevcut birimler: s (saniye), m (dakika), h (saatler) veya d (günler) Varsayılan birimler: s (saniye). Varsayılan: 0.
daemonize = evet #后台执行fpm varsayılan değer evet, hata ayıklamak isterseniz hayır olarak değiştirebilirsiniz. FPM'de, farklı ayarlar kullanılarak birden fazla işlem havuzu çalıştırılabilir. Bu ayarlar her süreç havuzu için ayrı ayrı ayarlanabilir.
dinle = 127.0.0.1:9000 #fpm监听端口, yani nginx dilinde PHP tarafından işlenen adres genellikle varsayılan değerdir. Mevcut formatlar şunlardır: 'ip:port', 'port', '/path/to/unix/socket'. Her süreç havuzunun kurulması gerekiyor.
listen.backlog = -1 #backlog数, -1 sınırsız demek, işletim sistemi tarafından belirlenir, sadece bu satırı yorumlayın. Kaynak: http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP, herhangi birini IP'yi kısıtlamayacak şekilde ayarlayın, diğer ana bilgisayarların nginx'ini bu FPM sürecine erişmek istiyorsanız, erişilebilecek IP adresini dinleme pahasına ayarlamanız gerekir. Varsayılan değer herhangi bir değerdir. Her adres virgülle ayrılır. Eğer ayarlanmamış veya boşsa, herhangi bir sunucu bağlantı talep edebilir
listen.owner = www listen.group = www listen.mode = 0666 #unix soket ayarı seçeneği, TCP ile erişiyorsanız, burada yorum yapabilirsiniz.
kullanıcı = www grup = www #启动进程的帐户和组
pm = dinamik #对于专用服务器, pm statik olarak ayarlanabilir. #如何控制子进程 seçenekler statik ve dinamik. Statik seçilirse, pm.max_children ile sabit sayıda çocuk işlem belirtilir. Dinamik seçilirse, aşağıdaki parametrelerle belirlenir: pm.max_children #, en fazla çocuk işlem sayısı pm.start_servers #, başlangıçtaki süreçlerin sayısı pm.min_spare_servers #, minimum sayıda boşta işlem garantisi verin ve boşta işlem bu değerden küçükse yeni bir alt süreç oluşturun pm.max_spare_servers#, boşta işlem sayısının maksimum olmasını sağla, eğer boşta işlem bu değerden fazlaysa, bu işlem temizlenir
pm.max_requests = 1000 #设置每个子进程重生之前服务的请求数. Bu, bellek sızıntısı olabilecek üçüncü parti modüller için çok faydalıdır. '0' olarak ayarlanırsa, istek her zaman kabul edilir. PHP_FCGI_MAX_REQUESTS ortam değişkenlerine eşdeğerdir. Varsayılan: 0.
pm.status_path = /durum #FPM状态页面的网址. Ayarlar yoksa, durum sayfasına erişemezsiniz. Varsayılan özellik: hiçbiri. MUNIN izleme kullanılacak
ping.path = /ping #FPM监控页面的ping网址. Ayarlarınız yoksa, ping sayfasına erişemiyorsunuz. Bu sayfa, FPM'nin canlı olup olmadığını ve taleplere yanıt verebilip vermediğini dışarıdan tespit etmek için kullanılır. Unutmayın, bu kelimenin bir eğik çizgi (/) ile başlaması gerekir.
ping.response = pong. #用于定义ping请求的返回相应. HTTP 200 için metin/düz formatta metin döndürür. Varsayılan özellik: pong.
request_terminate_timeout = 0 #设置单个请求的超时中止时间. Bu seçenek, ayarlarda 'max_execution_time' belirtisi php.ini özel bir nedenle iptal edilmeyen betikler için faydalı olabilir. '0' olarak ayarlandığında 'Kapalı' demektir. 502 hataları sık sık karşılaşıldığında bu seçeneği değiştirmeyi deneyebilirsiniz.
request_slowlog_timeout = 10 saniye #当一个请求该设置的超时时间后, ilgili PHP çağrı yığını bilgileri yavaş loga yazılır. '0' olarak ayarlandığında 'Kapalı' demektir.
slowlog = log/$pool.log.slow #慢请求的记录日志, request_slowlog_timeout
rlimit_files = 1024 #设置文件打开描述符的rlimit限制. Varsayılan değer: Varsayılan açık handle 1024'tür, bu da ulimit -n ile görüntülenebilir ve ulimit -n 2048 ile değiştirilebilir.
rlimit_core = 0 #设置核心rlimit最大限制值. Mevcut değerler: 'sınırsız', 0 veya pozitif tam sayılar. Varsayılan değer: Sistem tanımlı değer.
chroot = #启动时的Chroot目录. Tanımlanmış dizinin mutlak bir yol olması gerekir. Eğer ayar yoksa, chroot kullanılmaz.
chdir = #设置启动目录, Chdir başladığında otomatik olarak o dizine gönderilir. Tanımlanmış dizinin mutlak bir yol olması gerekir. Varsayılan: güncel dizin, ve/dizin (chroot edildiğinde)
catch_workers_output = evet #重定向运行过程中的stdout和stderr到主要的错误日志文件中. Ayarlanmazsa, stdout ve stderr FastCGI kurallarına göre /dev/null sayfasına yönlendirilir. Varsayılan: Null.
PHP-FPM parametre ayarı
pm = dinamik; Hangi süreç miktarı yönetim yönteminin kullanıldığını gösterir
Dinamik, PHP-FPM işlem sayısının dinamik olduğu, başında pm.start_servers belirtilmesi, daha fazla istek varsa otomatik olarak boşta işlem sayısının pm.min_spare_servers'den az olmaması için otomatik olarak artacağı ve işlem sayısı büyükse, ayrıca fazla işlem sayısının pm.max_spare_server'den fazla olmaması için uygun şekilde temizleneceği anlamına gelir
Statik, PHP-FPM'deki işlem sayısının statik olduğu ve işlem sayısının her zaman pm.max_children tarafından belirtilen sayıya sahip olduğu, artmadığı veya azalmadığı anlamına gelir
pm.max_çocuk = 300; Statik modda etkinleştirilen php-fpm işlem sayısı pm.start_servers = 20; Dinamik modda başlatılan php-fpm süreçlerinin sayısı pm.min_spare_servers = 5; Dinamik modda minimum php-fpm işlem sayısı pm.max_spare_servers = 35; Dinamik modda maksimum php-fpm işlem sayısı
Eğer pm statikse, sadece pm.max_children parametresi geçerlidir. Sistem, belirli sayıda php-fpm süreci açacaktır
Eğer PM dinamikse, pm.max_children parametresi geçersiz olur ve son üç parametre etkisini gösterir. Sistem, php-fpm çalışmasının başında php-fpm pm.start_servers işlemlerini başlatacak ve ardından pm.min_spare_servers ile pm.max_spare_sunucular arasındaki php-fpm işlem sayısını sistemin ihtiyaçlarına göre dinamik olarak ayarlayacaktır
Peki, sunucumuz için hangi PM yöntemini seçmek daha iyi? Aslında, Apache gibi, PHP programları çalıştırıldığında çalıştırma sonrası bellek sızıntısı sorunları yaşar. Bu yüzden php-fpm süreci başlangıçta sadece yaklaşık 3M bellek kaplıyor ve bir süre çalıştıktan sonra 20-30M'ye yükseliyor.
Büyük belleğe sahip sunucular için (örneğin 8G veya daha fazla), statik max_children belirtmek aslında daha uygundur; çünkü bu ek işlem kontrolü gerektirmez ve verimliliği artırır. Php-fpm süreçlerinin sık sık değiştirilmesi de zamanı geciktireceği için, bellek yeterince büyük olduğunda statik efektleri açmak daha iyi olacaktır. Miktar ayrıca bellek/30M olarak da elde edilebilir; örneğin, 8GB bellek 100'e ayarlanabilir, ardından php-fpm tarafından tüketilen bellek 2G-3G ile kontrol edilebilir. Bellek biraz daha küçükse, örneğin 1G gibi, statik işlem sayısının belirtilmesi sunucunun kararlılığı için daha uygundur. Bu, php-fpm'nin yalnızca yeterli bellek almasını sağlar ve diğer uygulamalara küçük bir bellek tahsis eder, böylece sistem daha sorunsuz çalışır.
Küçük bir belleğe sahip bir sunucu için, örneğin 256M belleğe sahip VPS gibi, 20M bellek miktarına göre hesaplansa bile, 10 php-cgi işlemi 200M bellek tüketir, o zaman sistem çökmesi normal olur. Bu nedenle, php-fpm süreçlerinin sayısını kontrol etmeye çalışmalısınız ve diğer uygulamaların kapladığı belleği kabaca netleştirdikten sonra, bunun için statik küçük bir sayı belirlemelisiniz, böylece sistem daha stabil hale gelir. Ya da dinamik yöntemi kullanın, çünkü dinamik yöntem yedek süreci sonlandırır ve bir miktar belleği geri kazanır, bu yüzden daha az belleğe sahip sunucularda veya VPS'lerde kullanılması önerilir. Belirli maksimum miktar bellek/20M bazında elde edilir. Örneğin, 512M VPS için pm.max_spare_servers sayısını 20'ye ayarlamak önerilir. pm.min_spare_servers için ise sunucunun yüküne göre ayarlanması önerilir ve daha uygun değer 5~10 arasındadır.
4G belleğe sahip bir sunucuda 200 puan yeterli (benim 1G test makinem, en iyisi 64, en iyi değeri almak için stres testini kullanmak tavsiye edilir)
pm.max_requests = 10240;
nginx php-fpm yapılandırma sürecindeki en büyük sorun iç sızıntı sorunu: sunucudaki yük büyük değil, ancak bellek hızla büyüyor, belleği hızla tüketiyor ve ardından swap bölümünü tüketmeye başlıyor, sistem hızla kapanıyor! Aslında, resmi tanıtıma göre, php-cgi bellek sızıntısı yaşamazdır ve php-cgi her istek tamamlandıktan sonra belleği geri kazanır, ancak işletim sistemine serbest bırakılmaz, bu da php-cgi tarafından büyük miktarda bellek kaplanmasına neden olur.
Resmi çözüm PHP_FCGI_MAX_REQUESTS değerini düşürmektir; eğer php-fpm kullanılırsa, ilgili php-fpm.conf max_requests olur, yani iş parçacığını yeniden başlatmak için kaç tane istek gönderileceği anlamına gelir, bu değeri uygun şekilde düşürmemiz gerekir, böylece php-fpm otomatik olarak belleği boşaltır, internetteki 51200'ün çoğu değil, vb., aslında bununla ilgili başka bir değer max_ çocuklar, her PHP-FPM'de bu kadar işlem kurulacak, böylece gerçek bellek tüketimi max_children*max_requests* Her istek bellek kullanır, buna göre bellek kullanımını tahmin edebiliriz, böylece öldürmek için script yazmaya gerek kalmaz.
request_terminate_timeout = 30;
Maksimum çalışma süresi, php.ini içinde yapılandırılabilir (max_execution_time)
request_slowlog_timeout = 2; Yavaş kütükleri açın slowlog = log/$pool.log.slow; Yavaş log yolu
rlimit_files = 1024; Dosya tanımlayıcılarını açmak için php-fpm sınırı eklendi
|