답변:
FPM 은 PHP에서 FastCGI SAPI (Server API)를 관리하는 프로세스 관리자입니다.
기본적으로 SpawnFCGI 와 같은 필요성을 대체합니다 . FastCGI 자식을 적응 적으로 생성합니다 (현재로드에 필요한 경우 더 많이 시작됨을 의미 함).
그렇지 않으면 FastCGI와 운영상의 차이가별로 없습니다 (요청 시작부터 끝까지의 요청 파이프 라인은 동일합니다). 더 쉽게 구현할 수 있습니다.
SpawnFCGI
생성 할 프로세스 수와 프로세스 당 PHP 자식 수를 설정할 수 있습니다 . 따라서 100 개의 자식을 가진 1 개의 PHP 프로세스를 생성하는 것은 100 개의 자식을 가진 FPM을 사용하는 것과 동일합니다 ... 그러나 그 반대는 사실입니다. FPM이 죽으면 (세그 폴트 등) 전체 작업자가 죽습니다. SpawnFCGI에서 프로세스 중 하나가 죽더라도 나머지는 살아남을 수 있습니다. 다른 접근 방식. FPM은 기술적 인 이유로하지 않는 것이 좋습니다하지만 (실제로에서) 측의 코어를 따라 유지 있기 때문에 ...입니다
Anthony가 말한 것은 절대적으로 정확하지만 귀하의 경험이 훨씬 더 나은 성능과 효율성을 보여줄 것이라고 덧붙이고 싶습니다 ( fpm
-vs-가 fcgi
아니라 httpd
.
예를 들어, 내가 쿼드 코어 머신을 실행했습니다 lighttpd
+ fcgi
잘 따라 흥얼합니다. 성장에 대처하기 위해 16 코어 머신으로 업그레이드했는데 RAM 사용량과 세그 폴트라는 두 가지가 폭발적으로 증가했습니다. lighttpd
웹 사이트를 유지하기 위해 30 분마다 다시 시작하는 것을 발견 했습니다.
php-fpm 및 nginx로 전환했고 RAM 사용량이> 20GB에서 2GB로 떨어졌습니다. Segfaults도 사라졌습니다. 몇 가지 조사를 한 후 lighttpd 및 fcgi가로드중인 멀티 코어 시스템에서 잘 작동하지 않고 특정 인스턴스에서 메모리 누수 문제가 있음을 알게되었습니다.
이것은 php-fpm
보다 낫기 때문 fcgi
입니까? 전적으로는 아니지만 연결 하는 방법php-fpm
은을 통해 제공하는 방법보다 훨씬 더 효율적 으로 보입니다 fcgi
.
PHP를 CGI로 실행한다는 것은 기본적으로 웹 서버에 PHP 실행 파일의 위치를 알려주고 서버가 해당 실행 파일을 실행한다는 것을 의미합니다.
이므로
PHP FastCGI Process Manager (PHP-FPM)는 웹 사이트에서 과도한로드를 처리 할 수 있도록하는 PHP 용 대체 FastCGI 데몬입니다. PHP-FPM은이를 수행하기 위해 풀 (PHP 요청에 응답 할 수있는 작업자)을 유지합니다. PHP-FPM은 다중 사용자 PHP 환경에서 SUPHP와 같은 기존 CGI 기반 방법보다 빠릅니다.
그러나 둘 다 장단점이 있으며 특정 사용 사례에 따라 선택해야합니다.
이 링크에 대한 정보는 fastcgi 대 fpm 이 내 시나리오에서 사용할 처리기를 선택하는 데 매우 유용합니다.