maxclient 및 기타 제약 조건에도 불구하고 Apache가 너무 많은 프로세스를 생성함

maxclient 및 기타 제약 조건에도 불구하고 Apache가 너무 많은 프로세스를 생성함

내 MPM 제약 조건은 다음과 같습니다.

<IfModule mpm_prefork_module>
    StartServers         10
    MinSpareServers      10
    MaxSpareServers      10
    MaxClients           10
    MaxRequestsPerChild  2000
</IfModule>

그러나 그럼에도 불구하고 현재 20개 이상의 Apache 프로세스가 실행되고 있으며 지난 한두 시간 동안 40-50개나 되었습니다. MaxClient와 MaxSpareServers가 프로세스 수(예: 약 10개)를 제어해야 하지 않습니까?

내가 놓친 것이 있나요?

답변1

Apache는 다양한 형태로 제공되는데, 가장 일반적인 두 가지 형태는 다음과 같습니다.프리포크그리고노동자. 프리포크 모델은 여러 프로세스를 생성하지만 각 프로세스는 한 번에 하나의 요청만 처리합니다. 반면 작업자 모델은 여러 프로세스를 생성하고 각 프로세스에는 여러 스레드가 있으며 각 스레드는 한 번에 하나의 요청을 처리합니다.

배포판에 따라 예상한 모델과 다른 모델을 실행할 수도 있습니다. 프리포크를 기대하고 있지만 이것이 실행 중인 유형이 맞나요? 알아보려면 다음을 입력하세요.

$httpd -V
서버 버전: Apache/2.2.15(Unix)
서버 구축일: 2010년 5월 28일 07:58:25
서버 모듈 매직 넘버: 20051115:24
로드된 서버: APR 1.4.2, APR-Util 1.3.9
다음을 사용하여 컴파일됨: APR 1.4.2, APR-Util 1.3.9
아키텍처: 32비트
서버 MPM: 프리포크
  스레드: 아니
    분기: 예(가변 프로세스 수)

이 경우 내 Server MPM것은 같지만 Prefork귀하의 것은 다를 수 있습니다. Apache2를 실행하는 데비안 서버에서는 다음과 같습니다 Worker.

#/usr/sbin/apache2 -V
서버 버전: Apache/2.2.9(Debian)
서버 MPM: 작업자

일부 시스템(예: RedHat)에서는 프리포크 바이너리와 작업자 바이너리가 모두 존재하는 것이 일반적입니다(하나는 호출 httpd되고 다른 하나는 호출 httpd.worker되거나 유사한 것). 실제로 시작되고 있는 항목을 다시 확인하는 것이 좋습니다( ps또는 또는 top사용 ).cat /etc/init.d/httpd

답변2

이 질문을 우연히 발견한 사람에게는 또 다른 잠재적인 원인이 있습니다.

나는 당신이 이미 답을 찾았다고 생각한다는 것을 알고 있지만 프리포크를 사용하면 프로세스를 보더라도 동일한 것을 볼 수 있습니다. 프리포크를 사용하지 않았어야 합니다.

이는 이유:

http://httpd.apache.org/docs/2.4/mod/prefork.html

이 MPM(Multi-Processing Module)은 스레드되지 않은 사전 포크 웹 서버를 구현합니다.


내가 만난 다른 설명

구성 옵션이 작동하기 전에 프리포크 모듈을 로드하지만 대신 일부 기본값을 로드하는 것처럼 보이는 후에 로드하면 IfModule 지시문을 비활성으로 렌더링합니다. 배포판에서는 올바르게 시작되도록 설정되어 있으므로 사용자 정의된 Apache 구성에서만 이 내용을 볼 수 있습니다.

공장- 구성이 적용됩니다

LoadModule mpm_prefork_module /usr/lib/apache2/modules/mod_mpm_prefork.so

<IfModule mpm_prefork_module>
StartServers         1
MinSpareServers      1
MaxSpareServers      0
ServerLimit          4
MaxClients           4
MaxRequestsPerChild  4000
</IfModule>

작동하지 않습니다- 구성이 효과가 없습니다.

<IfModule mpm_prefork_module>
StartServers         1
MinSpareServers      1
MaxSpareServers      0
ServerLimit          4
MaxClients           4
MaxRequestsPerChild  4000
</IfModule>

LoadModule mpm_prefork_module /usr/lib/apache2/modules/mod_mpm_prefork.so

답변3

지금은 좀 멍청한 것 같지만 이건 다음과 같습니다.htop이 ps aux에 의해 많은 apache2 프로세스를 표시하지 않는 이유는 무엇입니까?내 문제를 설명합니다.

관련 정보