2012-02-29 3 views
8

지난 주 우리는 3.2.2 레일 레일 3.0.1에서 실행되었다 작은 프로젝트를 업그레이드했습니다. 거대한 메모리 누수/팽창은 레일 3.2 (루비 1.9.3 + 여객)

는 곧 업그레이드 후 우리는 가끔, 2 ~ 3 회, 우리는 seening하고 거대한 Phusion 여객 과정 (1-5 GB)의 인식.

우리는 Phusion 여객 3.0.11과 루비 1.9.3-P0을 실행하고 있습니다. 우리는 이미 성공하지 못한 다른 Ruby 버전 (1.9.2-p290 및 1.9.3-p125)을 시도했습니다.

이후, 우리는 Oink 우리의 메모리 사용을 추적하기 위해 노력했다. 불행히도 Oink는 메모리가 부 풀리는 이유를 보여주지 않습니다 - 큰 프로세스는 로그 파일에 더 이상 쓰지 않는 것 같습니다. 우리는 레일 3.0.1로 다시 다운 그레이드 할 때

문제는 사라졌다. 비슷한 문제가있는 사람이 있습니까? 너무 많은 ActiveRecord 인스턴스와 같은 가능한 메모리 누수가 있는지 코드를 확인했지만 아무 것도 찾지 못했습니다.

승객 대신 유니콘을 시험해 보는 것이 가치 있다고 생각합니까? 아니면 같은 문제가 발생할 가능성이 있습니까?

메모리 누수를 추적하는 방법에 대한 제안은 언제나 환영합니다. 이미 newrelic을 설정했지만 메모리 누수에 대한 자세한 정보는 표시하지 않습니다.

+1

승객을 유니콘 설정으로 바꿨으므로 시스템이 예상대로 작동합니다. 나는 일반 승객 문제이거나 승객/rvm (그리고 어쩌면 우리가 최근에 그것을 설치/업그레이드 한 방법)에 문제가 있는지는 알지 못합니다. –

+0

유니콘 설정을 공유 하시겠습니까? 나는 똑같은 문제를 겪고 있는데, 메모리 오버 플로우를 막기 위해 매 6 시간마다 서버를 다시 시작해야합니다! –

+2

늦게 답변 해 주셔서 감사합니다. 글쎄 ... 유니콘 설정을 공유하는 것은 여기에 의견을 게시하는 데 너무 많은 것입니다. 빠른 Google 검색이 도움이 될 것입니다. https://github.com/blog/517-unicorn에서 시작하십시오.기본적으로 그것은 업스트림 서버로 유니콘을 사용하는 nginx입니다. 유니콘 설정은 구성에서 단순한 unicorn.rb입니다. 여객에게서 전환하는 데 아마 한 시간이 걸렸습니다. 또 다른 하나는 우리의 Capistrano 설정에 유니콘 배치 항목을 추가하는 것입니다. –

답변

0

나는 메모리의 어떤 종류의 당신이 가진 승객 PassengerMaxPoolSize PassengerPoolIdleTime 및 기타 여객 설정을 설정 무엇 여객 메모리 통계 쇼와를 알고 관심이있을 것입니다.

어떻게 승객을 업그레이드 했습니까?

아파치 설정은 어떻게됩니까? prefork 또는 worker? 그것은 당신이 때문에 일반적으로보고있는 일부 성능 문제를 해결해야

#!/bin/sh 
export RUBY_HEAP_MIN_SLOTS=600000 
export RUBY_GC_MALLOC_LIMIT=59000000 
export RUBY_FREE_MIN=200000 
exec "/usr/bin/ruby" "[email protected]" 

:

난 당신이 승객이 사용하는 루비 래퍼이 넣어 가난한 GC 성능, 조정 그들에게 시도를보고있는 것으로 의심 가난한 루비 gc 기본값.

+0

우리가이 문제를 겪은 지 꽤 오래되었습니다. 불행히도 나는 더 이상 여객 구성을 모르지만 기본 또는 권장 값이라고 생각합니다. nginx도 설치된 기본 설치 스크립트로 Passenger를 설치했습니다. 위의 내 의견에 이미 썼습니다. 승객/Nginx 대신 Unicorn/nginx를 사용하여 문제를 해결했습니다. –

1

Red Hat 호환 Linux 인 경우 SystemTap을 사용할 수 있습니다. 데비안/우분투 시스템에서 SystemTap을 사용할 수 있는지 확실하지 않습니다. DTrace라고하는 대안이 없다면요. 여기에 몇 가지 기사가 있습니다 - 나는 이들 중 어느 것도 메모리 문제는 아니지만 (아마도 당신이 당신을 위해 트릭을 할 수있는 STP 스크립트를 찾을 수는 있지만) 여러 회귀 분석을 통해 성공적으로 수행했습니다. 여기에 읽기 :

http://lukas.zapletalovi.com/2012/02/peek-into-your-ruby-app-with-systemtap.html http://lukas.zapletalovi.com/2012/01/probing-ruby-apps-with-systemtap-in.html http://sourceware.org/systemtap/wiki/RubyMarker

마지막 링크는 루비 SystemTaps에로 후프 수있는 프로브를 보여줍니다. gc 실행이나 메모리 할당과 같은 생각들이 도움이 될 수 있습니다. 행운을 빕니다!