Apache2 서버에 유휴 작업자가 없어 성능 문제가 발생함

Apache2 서버에 유휴 작업자가 없어 성능 문제가 발생함

나는 apache2 및 mysql과 함께 php를 기반으로 구축된 SAAS 제품을 가지고 있으며 AWS에서 호스팅되었습니다. 피크 시간대에는 생산 속도가 매우 느리고 서버 상태를 확인하면 유휴 작업자가 0(영)이라고 표시됩니다. mpm-prefork를 사용하고 있습니다.

Current Time: Monday, 24-Aug-2020 19:36:32 UTC
Restart Time: Friday, 14-Aug-2020 06:03:27 UTC
Parent Server Config. Generation: 12
Parent Server MPM Generation: 11
Server uptime: 10 days 13 hours 33 minutes 5 seconds
Server load: 1.17 1.07 0.95
Total accesses: 28851443 - Total Traffic: 824.8 GB
CPU Usage: u289.99 s50.68 cu0 cs0 - .0373% CPU load
31.6 requests/sec - 0.9 MB/second - 30.0 kB/request
256 requests currently being processed, 0 idle workers

다음은 내 mpm-prefork.conf 설정 파일입니다.

<IfModule mpm_prefork_module>
        StartServers                     5
        MinSpareServers           5
        MaxSpareServers          10
        MaxRequestWorkers         450
        MaxConnectionsPerChild   0
</IfModule>

ubuntu20.04의 TOP 명령은 다음을 제공합니다.

top - 20:03:58 up 143 days, 11:16,  1 user,  load average: 0.48, 0.71, 0.83
Tasks: 369 total,   3 running, 317 sleeping,   0 stopped,   0 zombie
%Cpu(s): 15.9 us,  3.2 sy,  0.0 ni, 79.9 id,  0.0 wa,  0.0 hi,  1.0 si,  0.0 st
KiB Mem :  7865072 total,  1023492 free,  2752320 used,  4089260 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  4755856 avail Mem

세부정보에 따르면 1GB RAM이 아직 무료인 것을 알 수 있습니다. 그럼 유휴 작업자가 없나요? 또한 MaxRequestWorkers를 450으로 설정할 때 256개의 요청에 대해 유휴 작업자가 0인 이유도 있습니다. 시스템의 최대 RAM은 8GB입니다.

답변1

MPM 프리포크를 사용하면 증가 MaxRequestWorkers하면 ServerLimit.

스레드되지 않은 서버(즉, 프리포크)의 경우 MaxRequestWorkers는 요청을 처리하기 위해 시작될 최대 하위 프로세스 수로 변환됩니다. 기본값은 256입니다. 이를 늘리려면 ServerLimit도 높여야 합니다.

https://httpd.apache.org/docs/2.4/mod/mpm_common.html#maxrequestworkers

답변2

mpm_prefork를 사용하면 웹 서버는 요청을 처리하기 위해 새로운 프로세스를 생성합니다. 각 프로세스는 한 번에 하나의 요청만 처리할 수 있습니다.

귀하의 예에서 웹 서버는 요청 처리를 위해 대기 중인 유휴 서버 프로세스가 최소 5개, 최대 10개로 설정되어 있습니다. 250개 이상의 동시 요청을 처리하는 경우 웹 서버가 새 프로세스를 신속하게 생성하지 못할 수도 있습니다. 충분한.

로드 급증 또는 과도한 로드에 대해 충분한 사용 가능한 용량을 확보할 수 있도록 StartServers, MinSpareServers 및 MaxSpareServers 값을 늘릴 것입니다.

처리해야 하는 워크로드 유형에 따라 다른 다중 처리 모듈로 변경하는 것을 고려할 수도 있습니다.

편집: @tetech의 답변이 정확합니다. 그러나 웹 서버 성능을 향상시킬 수 있으므로 이러한 값을 조정하는 것을 고려할 수도 있습니다.

관련 정보