Do not speak Portuguese? Translate this site with Google or Bing Translator
PHP-FPM: Você sabia?

Posted on: January 29, 2020 12:18 PM

Posted by: Renato

Categories: PHP

Views: 298

PHP-FPM, mas você sabe como funciona?
FPM é um gerenciador de processos para gerenciar o FastCGI SAPI (Server API) em PHP.
O PHP-FPM é um serviço e não um módulo. Este serviço é executado completamente independente do servidor web em um processo à parte e é suportado por qualquer servidor web compatível com FastCGI (Fast Common Gateway Interface).
PHP-FPM é consideravelmente mais rápido que os outros métodos de se processar scripts php, e também é escalável, ou seja é possível construir clusters e expandir a capacidade do PHP de receber requisições.
Com o PHP-FPM os elementos e as instruções invocadas são guardados em memória, ou seja, é a implementação de uma cache ao nível do servidor para ser reutilizada diretamente se o pedido for novamente executado. Por esse motivo, o arquivo PHP é requisitado bem menos vezes, o que se traduz num decréscimo da carga de máquina (load average) e de uma melhor disponibilidade de recursos para que possa efetuar outros trabalhos.
O PHP-FPM pode invocar “processo filhos” dentro de um mesmo “worker pool”, separando completamente o processamento de um script PHP de outro. Essas propriedades são configuradas no arquivo da “pool”, por padrão é definido a pool “www”.
Basicamente o servidor web envia uma requisição PHP para o o PHP-FPM que então envia para um de seus filhos, e executa até que seja entregue a resposta.

Veja o diagrama abaixo:

NOTA: É imporante resaltar que para o php-fpm em modo tcp e em servidor diferente do servidor web, é preciso ter os scripts php em cada um desses servidores.

É possível realizar diversas configurações para as pools do php-fpm, veja o exemplo de arquivo de configuração da pool www em www.config:

; Nome da pool 'www'.
;Os comentários são feitos com ";"
[www]
;listen = 127.0.0.1:9000 ; É possível abrir um socket TCP ipv4 ou,
listen = /srv/run/php5-fpm.sock ; Definir um unix socket

;listen.allowed_clients = 127.0.0.1 ; No socket ipv4, é possível restringir  quem se conecta à ele.
; No modo unix socket é preciso definir um usuário e um grupo, o arquivo socket será criado com essas propriedades.
listen.owner = lighttpd
listen.group = lighttpd
listen.mode = 0666

; É preciso configurar sob qual usuário o processo irá rodar.
user = lighttpd
group = lighttpd

; É possível alterar valores do php.ini para uma determinada pool.
php_admin_value[error_log] = /var/log/php-fpm/$pool.log ; É possível usar algumas variáveis, $pool é o nome da pool ("www")
php_admin_value[memory_limit] = 2G ; Vale lembrar que o memory_limit é para cada processamento php, ou seja, um filho pode chegar ao limite de 2G se você definir essa configuração.

; Configuração de como o gerenciador de processo irá administrar os processo filhos.
; Os Valores possíveis são: 
; static - um valor fixo de processos filhos (pm.max_children) é definido e é imutável.
; dynamic - o número de processos filhos é definido de forma dinâmica com base no
; seguintes diretivas:
; pm.max_children - o número máximo de processos filhos que podem fique vivo ao mesmo tempo.
; pm.start_servers - o número de processos filhos criados na inicialização.
; pm.min_spare_servers - o número mínimo de processos filhos em "ocioso" estado (esperando para processar). Se o número
; dos processos "ociosos" for menor do que o definido.
; pm.max_spare_servers - o número máximo de processos filhos em "ocioso" estado (esperando para processar). Se o número
; dos processos "ociosos" for maior do que o definido. Processos ociosos são matados caso o número seja superior ao definido nessa directiva.

pm =  dynamic ; 

;  max_children * php_admin_value[memory_limit] deve ser menor que o Total Memory RAM disponível para o PHP-FPM.
pm.max_children = 120

pm.start_servers = 36 ; Valor padrão: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 15
pm.max_spare_servers = 50
pm.max_requests = 200 ; Número de requisições que um processo recebe antes de ser reiniciado.
pm.process_idle_timeout = 5s ; Tempo de tolerância de um processo ser ocioso, procesos ociosos por mais tempo que isso serão mortos.

Há funções que podem ou não ser usadas no PHP-FPM, como por exemplo o fastcgi_finish_requestque permite você entregar a reposta de forma parcial fechando a conexão http com o cliente e continuar processando algo no php em background.

Fonte: https://pt.stackoverflow.com/questions/207464/como-funciona-o-php-fpm


0

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (15) Variados (109) PHP (130) Laravel (157) Black Hat (3) front-end (28) linux (113) postgresql (39) Docker (26) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (54) devops (25) nodejs (5) npm (2) nvm (1) git (8) firefox (1) react (6) reactnative (5) collections (1) javascript (6) reactjs (7) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (1) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (11) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (4) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (1) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (39) Kubernetes (2) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (1) jwt (4) security (2) translate (1) kube (1) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (2) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (2) Architecture (3) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (1) autorizacao (2) authentication (4) authorization (2) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1)

New Articles



Get Latest Updates by Email