웹사이트 검색

Linux에서 PHP-FPM이 너무 많은 RAM을 소비하는 것을 방지하는 방법


LEMP(Linux, NGINX, MySQL/MariaDBPHP를 배포한 경우 Strong>) 스택인 경우 PHP 처리를 위해 NGINX(HTTP 서버로) 내에서 FastCGI 프록시를 사용하고 있을 것입니다. PHP-FPM(FastCGI Process Manager의 약어)은 널리 사용되는 고성능 대체 PHP FastCGI 구현입니다.

다음은 Linux에서 LEMP 스택을 설정하는 데 유용한 가이드입니다.

  • Ubuntu 20.04에서 PhpMyAdmin을 사용하여 LEMP 스택을 설치하는 방법
  • CentOS 8에 LEMP 서버를 설치하는 방법
  • Debian 10 서버에 LEMP를 설치하는 방법

최근 LEMP 웹 서버 중 하나에 있는 모든 PHP 웹 사이트가 느려지고 결국 서버 로그인 시 응답이 중단되었습니다. 우리는 시스템의 RAM이 부족하다는 것을 발견했습니다. 다음 스크린샷에 표시된 것처럼 PHP-FPM이 대부분의 RAM을 소비했습니다(한 눈에 보기 - 시스템 모니터링 도구).

glances

이 문서에서는 PHP-FPM이 Linux에서 시스템 메모리(RAM)를 너무 많이 또는 전부 소모하지 않도록 방지하는 방법을 보여줍니다. 이 가이드의 마지막 부분에서는 PHP-FPM 메모리 소비를 50% 이상 줄이는 방법을 배우게 됩니다.

PHP-FPM 메모리 사용량 줄이기

인터넷에서 조사한 결과, 풀 구성 파일에서 PHP-FPM의 메모리 소비를 줄이기 위해 PHP-FPM 프로세스 관리자와 그 일부 측면을 재구성해야 한다는 사실을 발견했습니다.

기본 풀은 www이고 해당 구성 파일은 /etc/php-fpm.d/www.conf(CentOS/RHEL/Fedora)에 있습니다. Strong>) 또는 /etc/php/7.4/fpm/pool.d/www.conf(Ubuntu/Debian/Mint).

sudo vim /etc/php-fpm.d/www.conf             [On CentOS/RHEL/Fedora]
sudo vim /etc/php/7.4/fpm/pool.d/www.conf    [On Ubuntu/Debian/Mint]

다음 지시어를 찾아 사용 사례에 맞게 값을 설정하세요. 주석 처리된 지시문의 경우 주석 처리를 제거해야 합니다.

pm = ondemand
pm.max_children = 80
pm.process_idle_timeout = 10s
pm.max_requests = 200

위의 지시문과 해당 값을 간략하게 설명하겠습니다. pm 지시문은 프로세스 관리자가 하위 프로세스 수를 제어하는 방법을 결정합니다. 기본 방법은 동적입니다. 즉, 하위 프로세스의 최대 수를 정의하는 pm.max_children을 포함한 다른 지시문에 따라 하위 프로세스(하위 프로세스) 수가 동적으로 설정됩니다. 동시에 살아있을 수 있습니다.

가장 이상적인 프로세스 관리자는 시작 시 하위 프로세스가 생성되지 않고 요청 시 생성되는 ondemand 체계입니다. 하위 프로세스는 유휴 프로세스가 종료되기까지의 시간(초)을 정의하는 pm.max_childrenpm.process_idle_timeout을 기반으로 새 요청이 연결될 때만 분기됩니다.

마지막으로, 다시 생성되기 전에 각 하위 프로세스가 실행해야 하는 요청 수를 정의하는 pm.max_requests 매개변수를 설정해야 합니다. 이 매개변수는 타사 라이브러리의 메모리 누수에 대한 해결 방법으로도 사용할 수 있습니다.

위와 같이 구성한 후 이제 서버에서 RAM 사용량이 양호하다는 것을 알았습니다. 이 주제나 질문과 관련하여 공유할 생각이 있습니까? 아래 피드백 양식을 통해 문의해 주세요.