it-swarm-ko.tech

Apache HTTPD가 100 % CPU를 무기한 사용하게하는 원인

약간로드 된 Apache HTTPD 2.0을 실행하는 애플리케이션은 때때로 Apache 프로세스 중 하나 (또는 ​​그 이상?)가 100 % CPU를 차지하는 문제가 발생했습니다. 우리는 현재 HTTPD 2.2를 실행하고 있습니다. 2.2에서도 이것을 보았을 것입니다. 확실하지 않습니다. 어떤 경우에는 CPU 사용량이 HTTPD를 호스팅하는 Windows 서버에 대한 콘솔 액세스를 제외한 모든 것을 차단했습니다. 나는 아파치가 이것을하게 만드는 원인을 추적 할 수 없었다.

환경은 mod_rewrite를 사용하여 정적 콘텐츠를 직접 제공하는 Apache HTTPD이지만 다른 사용자 지정 구성은 많이 사용하지 않습니다. HTTPD는 mod_jk (1.2.25)를 통해 Apache Tomcat (5.x)과 통신합니다.

다른 사람이 이것을 만났고 해결 했습니까? 설치 한 해결 방법은 다음 구성을 사용하여 각 Apache HTTPD 하위 프로세스를 최대 요청 수로 제한하는 것입니다.

MaxRequestsPerChild 1000

애플리케이션이 HTTP/1.1을 사용하기 때문에 이는 실제로 하위 프로세스 당 1000 개 이상의 요청이고 하위 프로세스 당 100,000 개 이상의 요청입니다.

3
Eddie

잠금은 Apache 자체가 아닌 모듈에서 발생할 가능성이 큽니다. 당신의 설정은 아주 최소한으로 들리므로 나는 mod_jk 범인으로. 제한 MaxRequestsPerChild 문제가 해결되면 허용 가능한 해결 방법이라고 말할 수 있습니다. 모듈의 버그는 오랜 시간 또는 많은 요청 후에 만 ​​트리거 될 수 있으며,이를 추적하는 데 열중하지 않는 한이를 제거하는 것으로 충분할 것입니다.

이를 추적하려면 먼저 서버 사용자가 쓸 수있는 위치를 가리 키도록 CoreDumpDirectory를 구성해야합니다. 문제가되는 프로세스가 코어 파일을 남겨 두도록 할 수 있다면 문제의 원인을 추적하는 데 도움이 될 것입니다. 이 작업에 대한 힌트는 Apache 디버깅 가이드 에서 찾을 수 있습니다.

5
John Dalton

내가 이것을 보았을 때 그 이유는 다음과 같습니다.-호스팅 된 앱 또는 스크립트가 문제의 원인입니다. 예를 들어 무한 루프 또는 무언가가 있습니다. 잠금 또는 재부팅으로 문제가 일시적으로 해결되는 다른 문제로 인해 OS가 불안정 해졌습니다.

내 제안 :-컴퓨터를 재부팅하십시오. -기다렸다가 다시 발생하는지 확인하십시오-모드없이 서버를 다시 시작하십시오. -각 모드를 하나씩 켜고 매번 사용법을 관찰하십시오.

2
cbrulak

apache 용 mod_proctitle 설치

1
dims

실제로 존재하지 않는 로그 디렉토리가있을 때 이런 일이 발생하는 것을 보았습니다. 왜 그들이 더 잘 처리하지 못하는지 모르겠지만 모든 로그 디렉토리가 있고 프로세스가 거기에 쓸 수 있는지 확인하고 싶을 수 있습니다.

1
carson

RLimitCPU가 항상 도움이되는 것은 아닙니다. Apache 코드의 모든 부분이이를 확인하는 것은 아니기 때문입니다.

MaxRequestsPerChild도 도움이되지 않을 수 있습니다. 상대적으로 '신선한'자식에서 본 적이 있기 때문입니다.

제 경우에는 우리가 사용하는 모듈 (mod_Perl)과 관련이 있고 소켓 연결이 끊어진 것으로 의심됩니다. 이 문제는 wget이나 curl ( '데이터 전달'에 많이 사용됨)이 아닌 브라우저 연결에서만 발생하는 것 같습니다.

1
ericslaw

MaxRequestsPerChild를 제한하면 메모리 사용에 도움이되지만 말하는 방식으로 CPU에 영향을주지 않아야합니다. 일어날 가능성이 높은 것은 mod_jk가 충돌하고 Apache 모듈이기 때문에 httpd 프로세스 아래에 표시된다는 것입니다.

1
reconbot