Upgrade to Pro — share decks privately, control downloads, hide ads and more …

O Que É e Como Funciona o PHP-FPM?

O Que É e Como Funciona o PHP-FPM?

Nesta palestra vamos explorar o que acontece nos bastidores do PHP-FPM, isto é, do momento em que a requisição HTTP chega até o início da execução do script. Faremos uma breve viagem pelo histórico de execução do PHP, entendendo como a necessidade de escala moldou o surgimento do FastCGI e do PHP-FPM. Veremos como ele funciona, quais problemas resolve no dia a dia e por que se tornou a forma mais comum de executar aplicações PHP.

Avatar for Marcel dos Santos

Marcel dos Santos

October 21, 2025
Tweet

More Decks by Marcel dos Santos

Other Decks in Programming

Transcript

  1. Interaja nas mídias sociais! - fale sobre o evento, palestrantes

    e conteúdo - tire fotos do evento e publique - interaja com outros participantes do evento - tire dúvidas ou dê feedbacks para os palestrantes - utilize as hashtags #php, #phpeste e #phppiaui
  2. O PHP-FPM é uma ferramenta que todo programador PHP usa

    mas que, às vezes, nem sabe que ela existe.
  3. Entender o seu funcionamento é muito importante para o gerenciamento

    adequado de aplicações PHP em produção.
  4. No início da web, utilizava-se o protocolo CGI para a

    comunicação entre um servidor web e um programa externo.
  5. / / aplicação CGI escrita em C que imprime informações

    / / da requisição HTTP obtidas de variáveis de ambiente #include <stdio.h> #include <stdlib.h> int main(int argc, char * argv[]) { char * addr, * method, * query_string; addr = getenv("REMOTE_ADDR"); method = getenv("REQUEST_METHOD"); query_string = getenv("QUERY_STRING"); printf("Content - type:text/html\n\n"); printf("Remote address: %s<br / > ", addr); printf("Method: %s<br / > ", method); printf("Query string: %s<br / > ", query_string); }
  6. O servidor web recebia a requisição HTTP e iniciava um

    programa separado através da criação de um novo processo.
  7. O servidor web passava informações através de variáveis de ambiente

    e da entrada padrão (STDIN) para o programa externo.
  8. Ele obtinha as informações, realizava o processamento e retornava uma

    resposta a partir da saída padrão (STDOUT).
  9. A resposta era recebida pelo servidor web que, então, devolvia

    para o cliente através de uma resposta HTTP.
  10. servidor cliente requisição HTTP navegador servidor web O ciclo de

    vida de uma aplicação CGI 1. O navegador faz uma requisição HTTP para o servidor web.
  11. servidor cliente requisição HTTP navegador servidor web O ciclo de

    vida de uma aplicação CGI 1. O navegador faz uma requisição HTTP para o servidor web.
  12. servidor cliente requisição HTTP navegador servidor web aplicação CGI O

    ciclo de vida de uma aplicação CGI 1. O navegador faz uma requisição HTTP para o servidor web.
  13. servidor cliente requisição HTTP navegador servidor web aplicação CGI O

    ciclo de vida de uma aplicação CGI 2. O servidor web inicia um programa separado através da criação de um novo processo. 1. O navegador faz uma requisição HTTP para o servidor web.
  14. servidor cliente requisição HTTP navegador servidor web aplicação CGI O

    ciclo de vida de uma aplicação CGI 2. O servidor web inicia um programa separado através da criação de um novo processo. 1. O navegador faz uma requisição HTTP para o servidor web. stdin e getenv
  15. servidor cliente requisição HTTP navegador servidor web aplicação CGI O

    ciclo de vida de uma aplicação CGI 3. A aplicação CGI recebe os dados do servidor web através de variáveis de ambiente e da entrada padrão. 2. O servidor web inicia um programa separado através da criação de um novo processo. 1. O navegador faz uma requisição HTTP para o servidor web. stdin e getenv
  16. servidor cliente requisição HTTP navegador servidor web aplicação CGI O

    ciclo de vida de uma aplicação CGI 3. A aplicação CGI recebe os dados do servidor web através de variáveis de ambiente e da entrada padrão. 2. O servidor web inicia um programa separado através da criação de um novo processo. 1. O navegador faz uma requisição HTTP para o servidor web. stdin e getenv ⚙
  17. servidor cliente requisição HTTP navegador servidor web aplicação CGI O

    ciclo de vida de uma aplicação CGI 3. A aplicação CGI recebe os dados do servidor web através de variáveis de ambiente e da entrada padrão. 2. O servidor web inicia um programa separado através da criação de um novo processo. 1. O navegador faz uma requisição HTTP para o servidor web. stdin e getenv stdout ⚙
  18. servidor cliente requisição HTTP 4. A aplicação CGI faz o

    processamento e retorna o resultado pela saída padrão. navegador servidor web aplicação CGI O ciclo de vida de uma aplicação CGI 3. A aplicação CGI recebe os dados do servidor web através de variáveis de ambiente e da entrada padrão. 2. O servidor web inicia um programa separado através da criação de um novo processo. 1. O navegador faz uma requisição HTTP para o servidor web. stdin e getenv stdout ⚙
  19. servidor cliente requisição HTTP 4. A aplicação CGI faz o

    processamento e retorna o resultado pela saída padrão. navegador servidor web aplicação CGI O ciclo de vida de uma aplicação CGI 3. A aplicação CGI recebe os dados do servidor web através de variáveis de ambiente e da entrada padrão. 2. O servidor web inicia um programa separado através da criação de um novo processo. 1. O navegador faz uma requisição HTTP para o servidor web. stdin e getenv stdout ⚙
  20. servidor cliente requisição HTTP 4. A aplicação CGI faz o

    processamento e retorna o resultado pela saída padrão. 5. O servidor web obtém o resultado do processamento e retorna uma resposta HTTP. navegador servidor web aplicação CGI O ciclo de vida de uma aplicação CGI 3. A aplicação CGI recebe os dados do servidor web através de variáveis de ambiente e da entrada padrão. 2. O servidor web inicia um programa separado através da criação de um novo processo. 1. O navegador faz uma requisição HTTP para o servidor web. stdin e getenv stdout ⚙
  21. servidor cliente requisição HTTP 4. A aplicação CGI faz o

    processamento e retorna o resultado pela saída padrão. 5. O servidor web obtém o resultado do processamento e retorna uma resposta HTTP. navegador servidor web aplicação CGI O ciclo de vida de uma aplicação CGI 3. A aplicação CGI recebe os dados do servidor web através de variáveis de ambiente e da entrada padrão. 2. O servidor web inicia um programa separado através da criação de um novo processo. 1. O navegador faz uma requisição HTTP para o servidor web. stdin e getenv stdout ⚙
  22. A falha da aplicação CGI não afeta o servidor web.

    servidor servidor web aplicação CGI 🔥 ❌ 😵
  23. Isso é custoso para o servidor pois o consumo de

    CPU e memória aumentava drasticamente.
  24. Outro problema é que não era possível reutilizar recursos como

    conexões de banco de dados e caches em memória.
  25. A multiplexação permite enviar várias requisições entre o servidor web

    e a aplica- ção FastCGI através da mesma conexão.
  26. aplicação FastCGI servidor web A multiplexação permite a comunicação de

    várias requisições usando a mesma conexão. conexão via socket de rede ou socket Unix muliplexação
  27. # encaminha requisições PHP para o PHP-FPM via FastCGI location

    ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/rn/php/php8.2-fpm.sock; fastcgi_index index.php; include fastcgi_params; }
  28. A sigla FPM signi fi ca FastCGI Process Manager ou

    gerenciador de processos FastCGI.
  29. # systemctl status php7.3-fpm • php7.3-fpm.service - The PHP 7.3

    FastCGI Process Manager Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2019-02-17 06 : 29 : 31 UTC; 30s ago Docs: man:php - fpm7.3(8) Main PID : 32210 (php - fpm7.3) Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traff i c: 0req/sec" Tasks: 3 (limit: 1152) CGroup: /system.slice/php7.3-fpm.service ├─32210 php - fpm: master process (/etc/php/7.3/fpm/php - fpm.conf) ├─32235 php - fpm: pool w w w └─32236 php - fpm: pool w w w
  30. O processo master gerencia a criação, reinicialização e destruição dos

    processos workers. php-fpm processo worker processo worker processo worker processo master
  31. [ w w w ] user = w w w

    - data group = w w w - data listen = /var/run/php/php7.2-fpm.sock pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.status_path = /status pm.max_requests = 500
  32. Eles executam de forma isolada, isto é, são stateless e

    seguem a arquitetura shared- nothing.
  33. O ciclo de vida de uma requisição HTTP com o

    PHP-FPM cliente servidor web
  34. O ciclo de vida de uma requisição HTTP com o

    PHP-FPM cliente servidor web
  35. O ciclo de vida de uma requisição HTTP com o

    PHP-FPM cliente servidor web
  36. requisição HTTP O ciclo de vida de uma requisição HTTP

    com o PHP-FPM 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web
  37. php-fpm (aplicação FastCGI) requisição HTTP O ciclo de vida de

    uma requisição HTTP com o PHP-FPM 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web
  38. php-fpm (aplicação FastCGI) requisição HTTP O ciclo de vida de

    uma requisição HTTP com o PHP-FPM 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web processo master
  39. php-fpm (aplicação FastCGI) pool requisição HTTP O ciclo de vida

    de uma requisição HTTP com o PHP-FPM 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web processo master
  40. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP O

    ciclo de vida de uma requisição HTTP com o PHP-FPM 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web processo master
  41. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP O

    ciclo de vida de uma requisição HTTP com o PHP-FPM 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web processo master processo worker 😴
  42. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP O

    ciclo de vida de uma requisição HTTP com o PHP-FPM 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web processo master processo worker 😴 processo worker 😴
  43. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP O

    ciclo de vida de uma requisição HTTP com o PHP-FPM 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web processo master processo worker 😴 processo worker 😴
  44. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP O

    ciclo de vida de uma requisição HTTP com o PHP-FPM 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web processo master processo worker 😴 processo worker 😴
  45. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP O

    ciclo de vida de uma requisição HTTP com o PHP-FPM 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web processo master processo worker 😴 processo worker 😴
  46. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP O

    ciclo de vida de uma requisição HTTP com o PHP-FPM 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web requisição FastCGI processo master processo worker 😴 processo worker 😴
  47. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP O

    ciclo de vida de uma requisição HTTP com o PHP-FPM 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web requisição FastCGI conexão via socket de rede processo master processo worker 😴 processo worker 😴
  48. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP O

    ciclo de vida de uma requisição HTTP com o PHP-FPM 2. O servidor web faz uma requisição FastCGI para o PHP-FPM. 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web requisição FastCGI conexão via socket de rede processo master processo worker 😴 processo worker 😴
  49. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP O

    ciclo de vida de uma requisição HTTP com o PHP-FPM 2. O servidor web faz uma requisição FastCGI para o PHP-FPM. 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web requisição FastCGI conexão via socket de rede processo master processo worker 😴 processo worker 😴
  50. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP O

    ciclo de vida de uma requisição HTTP com o PHP-FPM 3. O processo master encaminha a requisição para um processo worker. 2. O servidor web faz uma requisição FastCGI para o PHP-FPM. 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web requisição FastCGI conexão via socket de rede processo master processo worker 😴 processo worker 😴
  51. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP O

    ciclo de vida de uma requisição HTTP com o PHP-FPM 3. O processo master encaminha a requisição para um processo worker. 2. O servidor web faz uma requisição FastCGI para o PHP-FPM. 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web requisição FastCGI conexão via socket de rede processo master processo worker ⚙ processo worker 😴 processo worker 😴
  52. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP O

    ciclo de vida de uma requisição HTTP com o PHP-FPM 3. O processo master encaminha a requisição para um processo worker. 2. O servidor web faz uma requisição FastCGI para o PHP-FPM. 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web requisição FastCGI conexão via socket de rede processo master 4. O processo worker executa o script PHP isoladamente e um de cada vez. processo worker ⚙ processo worker 😴 processo worker 😴
  53. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP O

    ciclo de vida de uma requisição HTTP com o PHP-FPM 3. O processo master encaminha a requisição para um processo worker. 2. O servidor web faz uma requisição FastCGI para o PHP-FPM. 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web requisição FastCGI conexão via socket de rede processo master 4. O processo worker executa o script PHP isoladamente e um de cada vez. processo worker ⚙ processo worker 😴 processo worker 😴
  54. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP 5.

    Ao terminar, o processo retorna o resultado da execução e fi ca ocioso esperando outras requisições. O ciclo de vida de uma requisição HTTP com o PHP-FPM 3. O processo master encaminha a requisição para um processo worker. 2. O servidor web faz uma requisição FastCGI para o PHP-FPM. 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web requisição FastCGI conexão via socket de rede processo master 4. O processo worker executa o script PHP isoladamente e um de cada vez. processo worker ⚙ processo worker 😴 processo worker 😴
  55. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP 5.

    Ao terminar, o processo retorna o resultado da execução e fi ca ocioso esperando outras requisições. O ciclo de vida de uma requisição HTTP com o PHP-FPM 3. O processo master encaminha a requisição para um processo worker. 2. O servidor web faz uma requisição FastCGI para o PHP-FPM. 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web requisição FastCGI conexão via socket de rede processo master 4. O processo worker executa o script PHP isoladamente e um de cada vez. processo worker ⚙ processo worker 😴 processo worker 😴
  56. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP 5.

    Ao terminar, o processo retorna o resultado da execução e fi ca ocioso esperando outras requisições. 6. A resposta FastCGI é retornada no formato binário através de conexão multiplexada. O ciclo de vida de uma requisição HTTP com o PHP-FPM 3. O processo master encaminha a requisição para um processo worker. 2. O servidor web faz uma requisição FastCGI para o PHP-FPM. 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web requisição FastCGI conexão via socket de rede processo master 4. O processo worker executa o script PHP isoladamente e um de cada vez. processo worker ⚙ processo worker 😴 processo worker 😴
  57. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP 5.

    Ao terminar, o processo retorna o resultado da execução e fi ca ocioso esperando outras requisições. 6. A resposta FastCGI é retornada no formato binário através de conexão multiplexada. O ciclo de vida de uma requisição HTTP com o PHP-FPM 3. O processo master encaminha a requisição para um processo worker. 2. O servidor web faz uma requisição FastCGI para o PHP-FPM. 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web requisição FastCGI conexão via socket de rede processo master 4. O processo worker executa o script PHP isoladamente e um de cada vez. processo worker ⚙ processo worker 😴 processo worker 😴
  58. php-fpm (aplicação FastCGI) processo worker 😴 pool requisição HTTP 5.

    Ao terminar, o processo retorna o resultado da execução e fi ca ocioso esperando outras requisições. 6. A resposta FastCGI é retornada no formato binário através de conexão multiplexada. O ciclo de vida de uma requisição HTTP com o PHP-FPM 3. O processo master encaminha a requisição para um processo worker. 2. O servidor web faz uma requisição FastCGI para o PHP-FPM. 1. O cliente faz uma requisição HTTP para o servidor web. cliente servidor web requisição FastCGI conexão via socket de rede processo master 4. O processo worker executa o script PHP isoladamente e um de cada vez. processo worker ⚙ processo worker 😴 processo worker 😴 7. O servidor web obtém o resultado do processamento e retorna uma resposta HTTP.
  59. # mostra o status do PHP-FPM ao acessar http: /

    / localhost/status pool: w w w process manager: dynamic start time: 28/Aug/2018 : 16 : 05 : 11 +0300 start since: 2438 accepted conn: 4 listen queue: 0 max listen queue: 0 listen queue len: 0 idle processes: 4 active processes: 1 total processes: 5 max active processes: 1 max children reached: 0 slow request: 0
  60. Ele te auxilia na de fi nição das con fi

    gurações adequadas para atender os requisitos de negócio da sua aplicação.