2011-02-23 5 views
1

요청에 따라 대량의 메모리를 사용하는 개별 아파치 프로세스에 문제가 있으며이를 메인 시스템으로 다시 공개하지 않습니다. 이러한 요청은 언제든지 발생할 수 있으므로 시간이 지남에 따라 웹 서버는 스왑에 푸시되고 SSH에 대해서도 응답하지 않게됩니다. 더욱이 요청이 끝난 후 파이썬은 메모리를 다시 야생으로 넘겨주지 못하고 결국 500mb - 1gb의 아파치 프로세스가 돌아 다니게된다.mod_python에서 개별 아파치 프로세스를 강제 종료

초당 요청 수가 매우 적지 만 각 요청은 매우 무거울 수 있습니다.

내가 원하는 것은 상주 메모리가 특정 임계 값을 초과하는 경우 요청 처리가 끝난 후 개별 아파치 프로세스 자식을 죽이는 방법입니다. mod_python에서 실제로이 작업을 수행하는 몇 가지 방법을 시도했지만 시스템 종료의 모든 형식은 응답을 클라이언트에 완료하지 못하는 것으로 나타납니다.

이런 일이 발생할 때마다 모든 프로세스 (실제로는 피하고 싶음)를 축복하는 것 외에 요청을 처리 한 후에 임의로 프로세스를 중지하도록 Apache에 지시하는 방법이 있습니까? 모든 아이디어를 환영합니다.

시스템의 기존 특성으로 인해 이후 버전의 Python으로 업그레이드 할 수 없으므로 향상된 메모리 성능 2.5를 사용할 수 없습니다. 마찬가지로, 우리는 현재 운영 체제가 붙어 있습니다.

버전 : 시스템 : 레드햇 엔터프라이즈 4

아파치 : 2.0.55

파이썬 : 2.3.5

+0

왜 옵션이 아닌 mod_wsgi와 같은 죽지 않은 항목으로 이동하고 있습니까? –

+0

시간 제약이 주로 있습니다. 결국 그것은 계획이지만 우리가 사용하고있는 프레임 워크는 마이그레이션을위한 실제 작업이 필요합니다. 우리는 이번 릴리즈에서 해킹이 충분하고 다음에 mod_python을 교체 할 것으로 기대하고 있습니다. – Andrew

답변

0
나는 그것이 가능하다하더라도, 그것은 엄청난 될 것이라고 말하고 싶지만

해킹 (및 불안정) -이 경우 아파치 외부 프로세스를 설정해야합니다.이 프로세스는 실행중인 프로세스를 감독하고 메모리/시간 미리 정의 된 제한을 초과 할 때 개별 Apache를 종료합니다.

그런 스크립트는 수초마다 검사를 수행하거나 매분마다 crontab에 넣을 수있는 메인 루프로 계속 실행될 수 있습니다.

서빙 프로세스 내부에서 그걸 시도 할 이유가 없습니다.

+0

나는 통제 할 수없는 나선형 프로세스를위한 사신 데몬을 작성했지만,이 장기 실행 프로세스 중 하나에 완료 할 수있는 기회를주고 정상적으로 종료하는 해결책을 찾고자합니다. – Andrew

+0

@Andrew "브라우저에서 열어도 실행"이라고 생각합니다. 이것은 "통제 불능의 프로세스"에 가깝습니다. 그 데몬을 공유 할 수 있습니까? 내가 관심. 아마도 페이스트 빈일까요? 감사. – erm3nda