문제

내 RubyOnRails 앱은 Apache 구성 뒤에있는 일반적인 mongrel 팩으로 설정됩니다.우리는 Mongrel 웹 서버 메모리 사용량이 특정 작업에서 상당히 커질 수 있음을 확인했으며 언제든지 선택한 Mongrel 프로세스를 동적으로 다시 시작할 수 있기를 바랍니다.

하지만 여기에 들어 가지 않을 이유 때문에 Mongrel이 요청을 처리하는 동안 중단하지 않는 것이 매우 중요 할 수 있으므로 간단한 프로세스 종료는답이 아닙니다.

이상적으로는 "당신이하고있는 일을 끝내고 더 이상 연결을 수락하기 전에 종료하십시오"라는 신호를 Mongrel에게 보내고 싶습니다.

표준 기술이나 모범 사례가 있습니까?

도움이 되었습니까?

해결책

Mongrel 소스에 대해 좀 더 조사한 결과 Mongrel이 신호 처리기를 설치하여 표준 프로세스 종료 (TERM)를 포착하고 정상 종료를 수행하는 것으로 나타 났으므로 이후에 특별한 절차가 필요하지 않습니다.모두.

요청을 처리하는 동안 Mongrel을 죽일 때 얻은 로그 출력에서이 작업을 볼 수 있습니다.예 : 라코 디스

다른 팁

monit 사용을 살펴보십시오.메모리 또는 CPU 사용량에 따라 동적으로 잡종을 다시 시작할 수 있습니다.다음은 내 클라이언트를 위해 작성한 구성 파일의 한 줄입니다. 라코 디스

그런 다음 모든 잡종 클러스터 인스턴스에 대해이 구성을 반복합니다.monit_stub 라인은 monit이 다운로드를 시도하는 빈 파일입니다.할 수 없으면 인스턴스도 다시 시작합니다.

참고 : 리소스 모니터링은 Darwin 커널이있는 OS X에서 작동하지 않는 것 같습니다.

더 좋은 질문은 앱이 너무 많은 메모리를 사용하지 않도록하는 방법으로 때때로 mongrel을 재부팅해야하는 것입니다.

www.modrails.com은 메모리 사용량을 크게 줄였습니다.

보기 :

하나의 프로세스가 실행중인 경우 정상적으로 종료됩니다 (적절한 부하 분산을 사용하는 경우 1이어야하는 대기열의 모든 요청을 처리합니다). 문제는 이전 서버가 죽을 때까지 새 서버를 시작할 수 없으므로 사용자가로드 밸런서에 대기하게됩니다. 내가 성공한 것은 몽글의 '캐스케이드'또는 롤링 재시작입니다. 모두 중지하고 모두 시작하는 대신 (따라서 하나의 잡종이 완료되고, 중지되고, 다시 시작되고, 연결을 수락 할 때까지 요청을 큐에 넣는 대신), 각 잡종을 순차적으로 중지했다가 시작하여 이전 잡종이 완료 될 때까지 다음 잡종을 다시 시작하라는 호출을 차단할 수 있습니다. 백업 (/ status 컨트롤러에 대한 실제 HTTP 확인 사용). 몽글이 굴러 가면서 한 번에 하나만 다운되고 두 개의 코드베이스에 걸쳐 서비스를 제공합니다.이 작업을 수행 할 수 없으면 1 분 동안 유지 관리 페이지를 표시해야합니다. 카피 스트라 노 또는 배포 도구를 사용하여이를 자동화 할 수 있어야합니다.

그래서 3 가지 작업이 있습니다. cap : deploy-유지 관리 페이지를 올린 다음 HTTP 확인 후 중단하는 후크를 사용하여 기존의 모든 재시작 방법을 동시에 수행합니다. cap : deploy : rolling-유지 관리 페이지없이 시스템 전체에서이 단계를 수행합니다 (iClassify에서 주어진 시스템에있는 mongrel의 수를 알기 위해 가져옴). cap deploy : migrations-일반적으로 마이그레이션을 '실시간'으로 실행하는 것이 좋지 않기 때문에 유지 보수 페이지 + 마이그레이션을 수행합니다.

사용해보기 : 라코 디스

다음을 사용할 수도 있습니다. 라코 디스

질문이 있습니다

/ usr / local / bin / mongrel_rails cluster :: start --only 8000이 트리거되면 어떻게됩니까?

모든 요청이이 특정 프로세스에서 끝까지 처리됩니까?아니면 중단됩니까?

이 모든 시작 / 재시작 작업이 최종 사용자에게 영향을주지 않고 수행 될 수 있는지 궁금합니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top