2009-06-18 3 views
0

저는 Slicehost의 256 슬라이스에 있으며 Apache와 Passenger를 실행하여 Rails 앱을 호스팅하고 있습니다. 하드 재부팅을 자주해야했습니다. 내가이 승객 기억력을 보았을 때.레일과 승객이 내 기억을 왜 먹고 있습니까?

--------- Passenger processes --------- 
** [out :: welcometonewnepal.com] PID Threads VMSize Private Name 
** [out :: welcometonewnepal.com] --------------------------------------- 
** [out :: welcometonewnepal.com] 8246 11  <b>84.1 MB 0.1 MB /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2/ext/apache2/ApplicationPoolServerExecutable</b> 0 /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2/bin/passenger-spawn-server /usr/bin/ruby1.8 /tmp/passenger.4217 
** [out :: welcometonewnepal.com] 8247 2  <b>57.1 MB 0.2 MB Passenger spawn server</b> 
** [out :: welcometonewnepal.com] 8903 1  <b>185.6 MB 9.6 MB Passenger ApplicationSpawner:</b> /home/deploy/rails_apps/welcometonewnepal/production/current 
** [out :: welcometonewnepal.com] 9065 1  <b>195.1 MB 76.6 MB Rails:</b> /home/deploy/rails_apps/welcometonewnepal/production/current 
** [out :: welcometonewnepal.com] ### Processes: 4 
** [out :: welcometonewnepal.com] ### Total private dirty RSS: 86.43 MB 

크기를 굵게 보면 왜 메모리를 많이 먹는 것일까 요?

답변

4

해당 통계만으로는 분명히 말할 수 없습니다.

하지만 낮은 데 도움이 :

  • 사용 Nginx에 아파치
  • 사용 루비 엔터 프라이즈 에디션 이상은 - 당신은 그냥 일반 1.8.6/7을 사용하는 것처럼 ... 보이는 바로이 메모리를 낭비 것

또한 앱에 많은 보석 및/또는 플러그인이 있습니까?

+0

+1 루비 용. 승객은 그것 없이는 거의 쓸모가 없다. 그리고 NginX는 빠르게 타 오르고 있지만 Apache는 (IMO) 사용하기가 더 쉽습니다. –

+0

REE의 경우 +1입니다. –

+0

이미 REE를 사용하고 있습니다! – Autodidact

4

그 많은 메모리를 차지하지 않습니다 ... 주목해야 할 열은 "개인"으로 표시된 것입니다.
모두 추가하면 (그리고 하단에 표시됨) 승객과 관련 프로세스가 86MB의 메모리 만 차지한다는 것을 알 수 있습니다. 그것의 대부분은 응용 프로그램의 크기 (76MB)에 의해 채택되고 있습니다.

서버에서 실행중인 다른 정보를 알려 주시면 htop을 설치하고 메모리별로 정렬하여 아이디어를 얻을 수 있습니다.

0

64 비트 환경에서 실행중인 경우 32 비트로 전환 해보십시오. Rails/Ruby는 32 비트 환경에서 더 적은 메모리를 사용하는 경향이 있습니다.

+1

왜 그런가요? 내가 읽을 수있는 모든 참고 자료가 있습니까? –

+0

모든 포인터가 두 배 더 큽니다. 그것은 쉽습니다 ... – lzap

0

Apache 또는 데이터베이스 설정을 조정 했습니까? 나는 워드 프레스 블로그 + 작은 레일즈 앱이 기본 우분투 구성으로 256MB 슬라이스에 너무 많은 것을 발견했다.

아파치 (prefork의 MPM)에서 다음 설정을 시도해보십시오

#KeepAlive On 
KeepAlive Off 
MaxKeepAliveRequests 100 
KeepAliveTimeout 4 

<IfModule prefork.c> 
StartServers  5 
MinSpareServers 5 
MaxSpareServers 10 
MaxClients   40 
MaxRequestsPerChild 1 
</IfModule> 

를 내 경우, 나는 25에 MaxClients의 아래로 더 조정했다 나는 일주일에 2-3 스왑 경고 이메일에서의 취득에 사용 Slicehost,하지만 내 설정을 전환 한 이후 2 주 동안 아무런 반응이 없었습니다. WorkerMPM 포크를 사용하는 경우 설정이 달라집니다.

MySQL을 사용하는 경우 InnoDB를 사용하지 않으면 InnoDB 테이블을 사용하지 않도록 설정하십시오. 그러면 메모리를 상당히 절약 할 수 있습니다.

+0

다음 설정으로 Prefork coz 대신 MpmWorker 모듈을 사용했습니다.

  \t StartServers 1 \t MaxClients 10 \t MinSpareThreads 1 \t MaxSpareThreads 1 \t ThreadsPerChild 10 \t MaxRequestsPerChild 50000 \t ThreadStackSize 500000  
Google에서 레일로 아파치를 조정하려면 대부분 MpmWorker를 사용하십시오! – Autodidact

관련 문제