
최근에 mpm을 perfork에서 이벤트로 옮겼습니다(또한 mod_php(php7.0)에서 php-fpm(proxy_fgi)). 최대 동시 연결 로드는 약 300으로 추정되었습니다. 그래서 mpm_event.conf에서 다음 구성을 설정했습니다.
StartServers 5
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 35
MaxRequestWorkers 350
MaxConnectionsPerChild 0
이제 ps를 사용하여 apache2 프로세스와 총 스레드 수를 관찰하면 이상한 동작이 보입니다.
일반적으로 총 12-13개의 apache2 프로세스가 있습니다( ps aux | grep apache2 | wc -l
). 한 명을 부모로 생각하면.. 대략 10~11명 정도 되는 셈이다. 또한 apache2의 총 스레드 수를 보면
ps -o nlwp $(pidof apache2) | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
나는 오랫동안 408 스레드를 관찰했습니다. 그래서 내 질문은 다음과 같습니다.
- MaxRequestWorkers(350) 이상으로 증가하는 총 스레드 수가 어떻게 가능합니까?
- 총 하위 프로세스 수가 StartServers(5) 이상으로 증가하는 것이 어떻게 가능합니까?
- 408의 정당성은 무엇입니까? (12*34?) 트래픽이 한도에 도달했습니까?
미리 도움을 주셔서 감사합니다.
답변1
비슷한 행동을 관찰하고 있습니다. 기본 MaxRequestWorkers 150을 사용하면 최대 301개의 스레드(즉, 상위 스레드 1개와 MaxRequestWorkers 스레드 2개)에 도달합니다.
MaxRequestWorkers를 40으로 설정하여 테스트했는데 81에 도달했습니다.
누구든지 이 Apache 동작을 확인할 수 있습니까?
PS 저는 Apache2를 프리포크로 실행하고 있습니다. 즉, ThreadLimit과 ThreadsPerChild는 IMHO를 사용하지 않습니다.