Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 11218|Yanıt: 4

PHP-FPM parametre yapılandırması ve ayarı

[Bağlantıyı kopyala]
Yayınlandı 26.07.2017 09:20:54 | | |
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





Önceki:Alibaba Cloud SLB yük dengeleme HTTP sağlık kontrolü hata analizi
Önümüzdeki:DZ X3.4 Dosya Doğrulama Eksik Dosyalar
 Ev sahibi| Yayınlandı 28.11.2021 13:42:00 |
[Antrenman] Nginx üzerinden php-fpm durum bilgilerini kontrol edin
https://www.itsvse.com/thread-10180-1-1.html
 Ev sahibi| Yayınlandı 19.12.2021 10:48:43 |
 Ev sahibi| Yayınlandı 16.01.2022 15:26:55 |
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep max_spare_servers
;             pm.max_spare_servers - 'boşta'daki maksimum çocuk sayısı
; Varsayılan Değer: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.max_spare_servers = 35
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep min_spare_servers
;             pm.min_spare_servers - 'boşta'daki minimum çocuk sayısı
; Varsayılan Değer: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 5
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep start_servers
;             pm.start_servers - başlangıçta yaratılan çocuk sayısı.
pm.start_servers = 20
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep max_requests
pm.max_requests = 10240
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep request_slowlog_timeout
; Not: Slowlog zorunludur request_slowlog_timeout ayarlanmışsa
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep slowlog
; - 'Slowlog'
; Not: Slowlog zorunludur request_slowlog_timeout ayarlanmışsa
slowlog = /alidata/log/php/$pool.log.slow
; 'slowlog' dosyasına atıldı. '0'lar' değeri 'kapalı' demektir.
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep rlimit
; Ana süreç için açık dosya tanımlayıcı rlimit ayarlayın.
; rlimit_files = 1024
; Ana süreç için maksimum çekirdek boyutu rlimit ayarlayın.
; rlimit_core = 0
; Açık dosya tanımlayıcısını rlimit ayarla.
; rlimit_files = 1024
; Maksimum çekirdek boyutu rlimit ayarlayın.
; rlimit_core = 0
[root@old_server konfırtısı] #
 Ev sahibi| Yayınlandı 16.01.2022 16:54:04 |
request_terminate_timeout = 10 saniye

Varsayılan değer 0 saniyedir, bu da PHP betiklerinin çalışmaya devam edeceği anlamına gelir. Bu şekilde, tüm php-cgi süreçleri meşgul olduğunda, Nginx+PHP WebServer artık yeni PHP taleplerini işleyemez ve Nginx kullanıcıya "502 Kötü Gateway" döndürür. request_terminate_timeout = 30'lar kullanılabilir
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com