복붙노트

[RUBY-ON-RAILS] 느린 초기 서버 시작 Phusion 여객 및 레일을 사용하는 경우

RUBY-ON-RAILS

느린 초기 서버 시작 Phusion 여객 및 레일을 사용하는 경우

우리가 작은 레일 스테이징 서버 테스트 것들을 밖으로에 한 설치되는 앱 Phusion 여객의 밴드 왜건에 점프합니다.

지금까지 사용에 아주 좋은되었습니다, 그 구성 및 응용 프로그램에게 바람을 배포 / 설치합니다. 문제는 우리가 매우 자주 히트를하지 않습니다 사용하고있는 사이트이며 백그라운드에서 서버를 종료 할 것으로 보인다. 이 요청을 처리하기 위해 새로운 서버를 시작할 때까지 누군가가 사이트에 갈 때 의미 그들은 정말 오래 기다려야합니다. 우리는 문서를 읽어 시도 꽤 몇 가지 다른 셋업 (스마트 / 스마트 LV2 모드, passengeridletime 등) 여전히 진정한 해결책을 발견하지 않았습니다했습니다.

Google 결과를 통해 갈고 후 우리는 정말 유용한 정보를 찾을 수 없습니다. 현재 우리는 실행하는 서버를 유지하는 시도에있는 모든 그리 자주 요청하는 cron 작업이 있습니다.

다른 사람이 문제가 발생하면 수정에 대한 조언을해야합니까?

해결법

  1. ==============================

    1.무엇이 일어나고 당신의 응용 프로그램 및 / 또는 ApplicationSpawners 인해 타임 아웃으로 종료된다는 점이다. 새 요청을 처리하기 위해, 승객도 빠른 컴퓨터에, 몇 초가 걸릴 수 있습니다 응용 프로그램의 새 복사본을 시동한다. 이 문제를 해결하려면, 당신은 살아 응용 프로그램을 유지하는 데 사용할 수있는 몇 가지 아파치 설정 옵션이 있습니다.

    무엇이 일어나고 당신의 응용 프로그램 및 / 또는 ApplicationSpawners 인해 타임 아웃으로 종료된다는 점이다. 새 요청을 처리하기 위해, 승객도 빠른 컴퓨터에, 몇 초가 걸릴 수 있습니다 응용 프로그램의 새 복사본을 시동한다. 이 문제를 해결하려면, 당신은 살아 응용 프로그램을 유지하는 데 사용할 수있는 몇 가지 아파치 설정 옵션이 있습니다.

    여기에 내가 내 서버에 무슨 짓을했는지 구체적입니다. PassengerSpawnMethod 및 PassengerMaxPreloaderIdleTime가 현재 상황에서 가장 중요한 구성 옵션입니다.

    # Speeds up spawn time tremendously -- if your app is compatible. 
    # RMagick seems to be incompatible with smart spawning
    # Older versions of Passenger called this RailsSpawnMethod
    PassengerSpawnMethod smart
    
    # Keep the application instances alive longer. Default is 300 (seconds)
    PassengerPoolIdleTime 1000
    
    # Keep the spawners alive, which speeds up spawning a new Application
    # listener after a period of inactivity at the expense of memory.
    # Older versions of Passenger called this RailsAppSpawnerIdleTime
    PassengerMaxPreloaderIdleTime 0
    
    # Just in case you're leaking memory, restart a listener 
    # after processing 5000 requests
    PassengerMaxRequests 5000
    

    사용 "스마트"산란 모드와 PassengerMaxPreloaderIdleTime 해제하여, 승객은 (아파치를 시작한 후 첫 번째 요청 후) 항상 메모리에 응용 프로그램의 한 사본을 보관합니다. 개별 응용 프로그램 청취자가 슈퍼 싼 작업입니다 사본에서 포크됩니다. 너무 일이 빨리 당신은 응용 프로그램이 리스너를 생성했다 여부를 알 수 없습니다.

    앱이 스마트 산란과 호환되지 않는 경우에, 나는 큰 PassengerPoolIdleTime을 유지하고 살아 리스너 숙박을 보장하기 위해 컬하고 cronjob에 또는 MONIT 또는 무언가를 사용하여 정기적으로 사이트를 타격 권 해드립니다.

    승객 사용 설명서는 다음과 추가 구성 옵션에 대한 멋진 참조입니다.

    편집하다: 앱이 스마트 산란과 호환되지 않는 경우, 아주 좋은 몇 가지 새로운 옵션이 있습니다

    # Automatically hit your site when apache starts, so that you don't have to wait
    # for the first request for passenger to "spin up" your application. This even
    # helps when you have smart spawning enabled. 
    PassengerPreStart http://myexample.com/
    PassengerPreStart http://myexample2.com:3500/
    
    # the minimum number of application instances that must be kept around whenever 
    # the application is first accessed or after passenger cleans up idle instances
    # With this option, 3 application instances will ALWAYS be available after the
    # first request, even after passenger cleans up idle ones
    PassengerMinInstances 3
    

    그래서, 당신은 PassengerPreStart 및 PassengerMinInstances을 결합 할 경우, 승객은 아파치로드 직후 3 개 인스턴스를 회전하며, 사용자가 거의 (면 적) 지연을 볼 수 없습니다, 그래서 항상 적어도 3 개 인스턴스를 유지합니다.

    이미 PassengerMaxPreloaderIdleTime 0 (권장) 스마트 산란을 사용하는 경우 또는, 당신은 즉시 시작의 추가 혜택을 얻을 수 PassengerPreStart를 추가 할 수 있습니다.

    phusion.nl의 영웅에 많은 감사합니다!

  2. ==============================

    2.그냥 nginx에 번역하지 않습니다 모두 'PassengerMaxRequests'와 'PassengerStatThrottleRate'지침이 질문에 걸림돌 어떤의 nginx 서버 사용자가 넣다. 그러나 다른 사람은 할 수 :

    그냥 nginx에 번역하지 않습니다 모두 'PassengerMaxRequests'와 'PassengerStatThrottleRate'지침이 질문에 걸림돌 어떤의 nginx 서버 사용자가 넣다. 그러나 다른 사람은 할 수 :

    rails_spawn_method smart;
    rails_app_spawner_idle_time 0;
    rails_framework_spawner_idle_time 0;
    passenger_pool_idle_time 1000;
    

    HTH!

    편집 rails_spawn_method 승객에서 더 이상 사용되지 않습니다 3 대신 사용

    passenger_spawn_method smart; 
    

    다른 모든 날짜까지 단지 좋다.

  3. ==============================

    3.또한 PassengerMinInstances을 사용할 수 있습니다 :

    또한 PassengerMinInstances을 사용할 수 있습니다 :

    http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerMinInstances

    이것은 PassengerPreStart와 결합 될 수있다

  4. ==============================

    4.레:

    레:

    # Additionally keep a copy of the Rails framework in memory. If you're 
    # using multiple apps on the same version of Rails, this will speed up
    # the creation of new RailsAppSpawners. This isn't necessary if you're
    # only running one or 2 applications, or if your applications use
    # different versions of Rails.
    RailsFrameworkSpawnerIdleTime 0
    

    그냥 뭔가 추가하고 유용 할 수 있습니다.

    현재 릴리스의 기본 스폰 방법 설정 때문에 프레임 워크 Spawner를 건너 뜁니다 "스마트 LV2"이다 프레임 워크 Spawner를 시간 제한은하지 않는 어쨌든 영향을 미치지 않을 것 명시 적으로 "스마트"에 스폰 방법을 설정합니다.

    출처: http://groups.google.com/group/phusion-passenger/browse_thread/thread/c21b8d17cdb073fd?pli=1

  5. ==============================

    5.호스트가 공유 서버 인 경우, 광산처럼, 당신은 설정을 변경할 수 없습니다 및 cron 작업과 함께 붙어있다.

    호스트가 공유 서버 인 경우, 광산처럼, 당신은 설정을 변경할 수 없습니다 및 cron 작업과 함께 붙어있다.

  6. ==============================

    6.나는이 문제를 가지고 있지만이 파일에는 쓰기 권한이 없었기 때문에 나는 승객의 설정을 변경할 수 없습니다. 나는 빠른 응답 내 응용 프로그램을 유지하는 도구 (http://www.wekkars.com)를 발견했다. 어쩌면 이것은 또한 당신을위한 해결책이 될 수 있습니다.

    나는이 문제를 가지고 있지만이 파일에는 쓰기 권한이 없었기 때문에 나는 승객의 설정을 변경할 수 없습니다. 나는 빠른 응답 내 응용 프로그램을 유지하는 도구 (http://www.wekkars.com)를 발견했다. 어쩌면 이것은 또한 당신을위한 해결책이 될 수 있습니다.

  7. ==============================

    7.승객의 버전을 확인하십시오. 그것은 이전 버전에 대한 RailsSpawnMethod <문자열>이었다.

    승객의 버전을 확인하십시오. 그것은 이전 버전에 대한 RailsSpawnMethod <문자열>이었다.

    (내 기억이 맞다 경우) 자세한 내용은 모두 레일 오래 된 여객 문서의 구성 지시 또는보고 승객을 대체 할 수 있도록하는 경우

  8. from https://stackoverflow.com/questions/853532/slow-initial-server-startup-when-using-phusion-passenger-and-rails by cc-by-sa and MIT license