Apache 프로세스는 얼마나 오래 유지됩니까?


9

아파치가 mod-php 프로세스를 분기 할 때 얼마나 오래 살아 있습니까? 응답이 전송되는 즉시 프로세스가 종료됩니까? 아니면 브라우저가 전체 응답을받을 때까지 프로세스가 계속 유지됩니까?

답변:


9

mod-php를 사용한다면 preforkMPM을 사용하고있을 것입니다. MPM은 하위 프로세스를 생성하여 요청을 처리합니다. 기본 apache2.conf(또는 httpd.conf배포판에 따라) 파일의 지시문에 따라 관리되는 이러한 어린이의 수와 수명 .

다음과 같은 부분을 찾으십시오 (값이 다를 수 있음).

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

Apache는 StartServers자동으로 자식을 생성합니다 . 이러한 프로세스는 요청이 들어올 때까지 유휴 상태가됩니다. 어린이가 바쁘면 MaxClients로드를 처리 하기 위해 어린이에게 생성되어 MinSpareServers유휴 어린이가 새 요청을 받도록 유지 합니다. 일단 상황이 진정되면 카운트가 끝날 때까지 유휴 어린이가 사망합니다 MaxSpareServers.

당신이 묻는 비트는에 의해 처리됩니다 MaxRequestsPerChild. 0으로 설정하면 이는 어린이가 영원히 살 수 있음을 의미하며 이는 대부분의 아파치 설치에서 기본값입니다. 다른 것으로 설정하면 요청 수를 처리 한 후 현재로드에 관계없이 각 하위 프로세스가 강제로 종료되었다가 다시 시작됩니다.

프리 포크 MPM에 대한 자세한 내용은 여기 ( http://httpd.apache.org/docs/2.2/mod/prefork.html)를 참조 하십시오.


고마워, 아파치에 대해 더 잘 이해할 수 있습니다. 내 구체적인 질문은 : 응답이 클라이언트로 다시 전송되면 자식 프로세스는 무엇을합니까? 클라이언트가 승인을 기다리는 동안 유휴 상태입니까, 아니면 새로운 요청을 즉시 처리 할 수 ​​있습니까?
Jamie Clinton

응답이 전송되고 클라이언트가 응답하면 TCP 연결은 기본적으로 15 초 동안 계속 열려 있습니다. 그 기간 동안 아이는 먼저 같은 클라이언트로부터 추가 HTTP 요청을받습니다. 아무것도 수신하지 않으면 TCP 연결이 닫히고 위 규칙에 따라 자식이 처리됩니다. 일반적으로 활성 상태로 유지되고 유휴 풀로 돌아갑니다. 이 동작은 클라이언트와 서버 모두에서 수정할 수 있습니다. (예를 들어, 즉시 연결을 닫는 것이 좋습니다.)
SmallClanger

또한 아직 사용하지 않은 경우 wireshark.org 는 클라이언트와 서버 간의 트래픽을 분석하는 데 유용한 도구입니다. 그것은 후드 아래에서 무슨 일이 일어나고 있는지에 대한 큰 통찰력을 줄 것입니다.
SmallClanger

4

httpd는 mod_php에 대한 프로세스를 포크하지 않습니다. mod_php가 포함 된 프로세스 자체를 분기합니다. 아동은 MaxRequestsPerChild요청 이 이행 될 때까지 계속 살아 있습니다. mod_php 자체는 스크립트가 종료되거나 시간 제한이 초과 될 때까지 PHP 스크립트에 대한 각 요청을 계속 처리합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.