다음 설정에서 Magento를 실행하는 사이트가 있습니다.
- mpm_worker가 포함된 Apache 2.4
- PHP-FPM
- 서버의 총 RAM: 14GB(Apache/PHP에 10GB 사용 가능)
각 PHP-FPM 프로세스는 약 80MB의 RAM을 소비합니다.
PHP-FPM과 mpm_worker의 설정을 미세 조정하고 싶습니다. 문서를 읽으면서 PHP-FPM 옵션과 mpm_worker 간의 관계에 대해 약간 혼란스러워졌습니다.
예를 들어, PHP-FPM에는 , 및 pm.min_spare_servers
. pm.max_spare_servers
구성 이 있습니다. 나는 PHP-FPM과 관련하여 이러한 옵션이 무엇을 의미하는지 이해합니다.pm.start_servers
max_children
그러나 mpm_worker에는 MinSpareThreads
, MaxSpareThreads
및 . 다시 말하지만, mpm_worker에 격리되어 있는 경우 나는 그들이 무엇을 하는지 이해합니다.StartServers
ThreadLimit
내 질문은: 이러한 구성이 서로 어떻게 관련되어 있습니까? 내가 StartServers=2
and 를 설정했다고 가정해 봅시다 ThreadsPerChild=25
. 이렇게 하면 Apache/mpm_worker와 관련하여 시작하는 데 50개의 스레드가 제공됩니다. 그런 다음 설정하면 pm.start_servers = 50
PHP-FPM은 처음에 50개의 프로세스를 생성합니다.
그렇다면 이 50개의 "Apache" 스레드와 50개의 "PHP-FPM" 프로세스 사이의 관계는 무엇입니까? 각 Apache 스레드는 하나의 PHP-FPM 프로세스를 사용합니까?
누군가가 이에 대해 통찰력을 줄 수 있기를 바랍니다.
감사해요!
답변1
Apache는 스레드의 하위 항목을 사용하여 클라이언트의 요청을 제공하지만 PHP 파일에 대해서만 PHP-FPM을 호출합니다. 이미지, CSS 및 js는 Apache에서 직접 제공되어야 하므로 PHP-FPM 스레드를 사용하지 않습니다.
PHP-FPM에는 자식이 없는 여러 스레드가 있습니다. 각 스레드는 Apache의 요청을 처리합니다.
AFAIK, 동일한 클라이언트의 여러 요청(페이지 로드, 이미지, CSS 및 js 포함)은 Apache에 KeepAlive가 설정되어 있지 않은 경우 여러 스레드를 소비해야 합니다.이 링크를 참조하세요KeepAlive에 대한 자세한 내용은
나는 최근에 Apache 서버를 직접 조정해 왔으며 코어가 여러 개인 경우 스레드당 하위 수를 늘리는 것이 더 낫다는 것을 알았습니다.
답변2
관계는 동적으로 매핑됩니다. 이는 별도의 서버에서도 실행될 수 있는 별도의 프로세스이므로 다양한 구성 옵션이 있습니다.
Apache 프로세스/스레드는 초기 연결을 처리한 다음 php-fpm 프로세스를 사용하여 요청 반환을 위해 PHP 파일을 구문 분석합니다.
여기에는 구성 방법에 대한 조언을 제공하는 많은 변수가 있지만 일반적으로 Apache를 구성하여 요청을 실시간으로 처리할 수 있는 충분한 스레드를 갖고 PHP 스크립트/wensites가 실행하기에 충분한 메모리를 갖도록 php-fpm을 구성합니다. 다양한 캐싱 옵션이 있으므로 실행 중인 시스템을 벤치마킹해야만 이를 결정할 수 있습니다.