Phusion Passenger 및 Rails를 사용할 때 초기 서버 시작 속도가 느림


87

Phusion Passenger의 악 대차에 뛰어 들기 위해 우리는 작은 레일 앱을위한 스테이징 서버를 설정하여 테스트했습니다.

지금까지는 사용하기가 매우 좋았으며 앱 설치 / 구성 및 배포가 매우 간편합니다. 문제는 우리가 사용하는 사이트가 자주 방문하지 않고 백그라운드에서 서버를 종료하는 것처럼 보인다는 것입니다. 누군가가 사이트에 가면 요청을 처리하기 위해 새 서버를 시작할 때까지 정말 오래 기다립니다. 우리는 문서를 읽고 꽤 다른 설정 (smart / smart-lv2 모드, passengeridletime 등)을 시도했지만 여전히 실제 해결책을 찾지 못했습니다.

Google 결과를 살펴본 후 유용한 정보를 찾을 수 없습니다. 현재 서버 실행을 유지하기 위해 자주 요청하는 크론 작업이 있습니다.

이 문제를 겪고있는 다른 사람이 있습니까? 해결책에 대한 조언이 있습니까?


나는 또한 Passenger Doc 사이트에서이 너겟을 찾았습니다 : modrails.com/documentation/…
dewrich

@dewrich 나는 당신의 cronjob이하는 일을 정확히 하는 도구 ( wekkars.com )를 찾았습니다
SteenhouwerD

답변:


119

무슨 일이 일어나고 있는지는 응용 프로그램 및 / 또는 ApplicationSpawners가 시간 초과로 인해 종료되고 있다는 것입니다. 새 요청을 처리하기 위해 Passenger는 애플리케이션의 새 복사본을 시작해야합니다. 이는 빠른 시스템에서도 몇 초가 걸릴 수 있습니다. 문제를 해결하기 위해 애플리케이션을 활성 상태로 유지하는 데 사용할 수있는 몇 가지 Apache 구성 옵션이 있습니다.

다음은 내 서버에서 수행 한 작업입니다. 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을 끄면 Passenger는 항상 메모리에 애플리케이션 사본 1 개를 보관합니다 (Apache 시작 후 첫 번째 요청 이후). 개별 Application리스너는 fork이 사본에서 추출되며 이는 매우 저렴한 작업입니다. 너무 빨리 발생하여 애플리케이션이 리스너를 생성해야했는지 여부를 알 수 없습니다.

앱이 스마트 스폰과 호환되지 않는 경우, 나는 큰 PassengerPoolIdleTime을 유지하고 리스너가 살아남을 수 있도록 curl과 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를 결합하면 Passenger는 아파치로드 직후 3 개의 인스턴스를 스핀 업하고 항상 최소 3 개의 인스턴스를 유지하므로 사용자가 지연을 거의 볼 수 없습니다.

또는 PassengerMaxPreloaderIdleTime 0이미 스마트 스폰 (권장)을 사용 중인 경우 추가 PassengerPreStart하여 즉시 시작의 추가 이점을 얻을 수 있습니다 .

phusion.nl 의 영웅들에게 감사드립니다 !


대답 해 주셔서 감사합니다. 나는 우리가 그 설정의 대부분을 시도했지만 올바른 조합이 아닐 수도 있다고 생각합니다. 내일 테스트를 받고 되돌릴 것입니다.
tsdbrown

굉장합니다. Nginx / Phusion Passenger 설치에 동일한 문제가 있었는데 이로 인해 엄청난 도움이되었습니다.
Scott Anderson

이 설정을 시도했지만 성능이 향상되지 않았지만 우리 앱은 RMagick을 사용하고 있습니다. 이에 대한 해결 방법이 있습니까? RMagick에서 작동하지 않는 이유는 무엇입니까?
Chip Castle

1
RailsSpawnMethod찬성되지 않습니다 PassengerSpawnMethod modrails.com/documentation/...
폴 러스

1
안녕하세요, 동일한 문제가 발생하여 해당 구성을 시도하고 싶지만 해당 구성을 어디에 배치해야하는지 모르겠습니다. 감사!
joseramonc 2013

41

이 질문에 걸려 넘어지는 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!

EDIT rails_spawn_method는 승객 3에서 더 이상 사용되지 않습니다.

passenger_spawn_method smart; 

다른 모든 것은 날짜까지 좋습니다.


7
감사합니다. 한 가지 주목할 점은 레일이 활성화 된 특정 사이트 구성이 아닌 다른 전역 설정으로 메인 nginx.conf의 passenger_pool_idle_time을 채워야한다는 것입니다.
Scott Anderson

그러나 승객 4 오류 :"passenger_max_preloader_idle_time" directive is duplicate
TangMonk 2015 년


2

레:

# 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

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

현재 릴리스의 기본 생성 방법은 프레임 워크 생성기를 건너 뛰는 "smart-lv2"입니다. 따라서 명시 적으로 생성 방법을 "스마트"로 설정하지 않는 한 프레임 워크 생성기 시간 제한을 설정해도 효과가 없습니다.

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


1

호스트가 저와 같은 공유 서버 인 경우 설정을 변경할 수 없으며 크론 작업이 중단됩니다.


이 특정 애플리케이션의 경우 고맙게도 그렇지 않습니다. 그러나 앞으로의 감사를 위해 그것을 염두에 둘 것입니다.
tsdbrown

1

나도이 문제가 있었지만이 파일에 대한 쓰기 권한이 없기 때문에 승객 설정을 변경할 수 없었습니다. 내 앱이 빠르게 응답하도록 하는 도구 ( http://www.wekkars.com )를 찾았습니다 . 아마도 이것은 당신에게 해결책이 될 수 있습니다.


0

승객의 버전을 확인하십시오. RailsSpawnMethod였습니다.<string>이전 버전의 경우 였습니다.

그렇다면 (올바르게 기억한다면) 모든 구성 지침에서 Passenger를 Rails로 바꾸거나 자세한 내용은 이전 승객 문서를 찾아보십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.