2010-03-06 3 views
1

내 VPS 계정에 메모리가 부족한 경우가 있습니다. Linux에서 Apache를 사용하고 있습니다. 지원에 의하면 느린 메모리 누수가 발생하여 MaxRequestsPerChild가이를 처리 할 수 ​​있습니다.메모리 누수 및 Apache

여기에 대해 몇 가지 질문이 있습니다. 자식 프로세스가 종료되면 스크립트가 세션 데이터를 잃게됩니까? 아무도 내가이 메모리 누수를 추적 할 수있는 조언을 가지고 있습니까?

감사

답변

0

아니, 자식 프로세스가이 시간에 요청의 한가운데에 있었다하지 않는 한 데이터가 손실되지 않습니다 죽었을 때 (발생하지해야하는 것이 MaxRequestsPerChild 값으로 인해 종료 된 경우).

테스트 시스템에서 동일한 소프트웨어 스택을 사용하여 메모리 누수를 재현 해보십시오. Valgrind와 같은 도구를 사용하여 감지하려고 시도 할 수 있습니다.

웹 서버 및 모듈의 디버그 빌드를 시도해 볼 수 있습니다. 그러면 디버그 빌드가 진행되어 상황을 감지 할 수 있습니다.

프로덕션 시스템의 비생산적인 동작을 재현하는 것은 어렵습니다. 웹 응용 프로그램의 자동 테스트 적용 범위가있는 경우 전체 자동 테스트 제품군을 사용해 볼 수도 있지만 실제로는 모든 코드 경로를 처리 할 가능성이 거의 없으므로 새 코드가 누락 될 수 있습니다.

0

자식 프로세스가 종료되면 스크립트에서 세션 데이터를 잃게됩니까? 스크립트 언어 및 세션 사용하는 핸들러 (실제 코드) 오히려 하드 무슨 말을해야할지 모른 채

.

대부분의 경우 모듈이나 [빠른] cgi를 통해 스크립팅 언어를 사용하면 세션 데이터가 실제로 손실 될 가능성이 거의 없습니다. 요청 처리 중에 프로세스가 중단되는 경우 갱신 된 세션을 세션을 저장하고있는 것으로 다시 쓰는 기회. 그리고 매우 드문 경우이지만 쓰기 되돌림 중에 죽으면 세션 데이터가 손상 될 수 있습니다. 이들은 아주 예외적 인 상황입니다.

OTOH 응용 프로그램 논리가 데몬 (예 : Java 컨테이너)을 통해 구현되는 경우 메모리 누수가 누적 될 가능성이 매우 높습니다 (다른 프로세스에 대해보고되지만).

MaxRequestsPerChild를 설정하여 문제가 완화되면 Apache 모듈에서 문제가 발생했음을 의미합니다.

내 경험에 따르면 Apache 자체 제작 릴리스는 메모리 누수없이 매우 안정적입니다. 그러나 모든 모듈을 사용하지는 않았습니다. ExtendedStatus가 모듈별로 메모리 사용량을 줄 수 있는지 확실하지 않습니다. 점검 할 가치가 있습니다.

필자는 이전에 PHP의 메모리 제한을 따르지 않는 PHP 모듈에 의해로드 된 모듈의 메모리 관리에 문제가 있음을 확인했습니다.

c