2009-10-28 4 views
1

Google 서버에서 수명이 긴 백그라운드 루비 프로세스에 문제가 있습니다.이 프로세스는 Tempfiles를 정리하지 않습니다. 내가 프로세스가 예를 들어, 사용, 물건을 검사 &에 주입하는 hijack을 사용하고 ,Ruby의 가비지 콜렉션 디버깅

ObjectSpace.each_object(ActiveRecord::Base){|o| puts o} 

은 - 문제의 TEMPFILES가 우리의 액티브 서브 클래스의 인스턴스에 의해 참조되고있는 것으로 나타났다, 그 인스턴스가 수집되지 않습니다.

나는 AR 인스턴스 &을 참조하는 것이 무엇인지 파악하지 못했습니다. 가비지 컬렉터가 사용하는 객체 그래프에 액세스하기위한 팁은 무엇입니까?

답변

2

루비의 가비지 컬렉터는 & 스윕 알고리즘입니다. (1) Object 인스턴스에서 시작하여 길을 따라 표시하는 모든 도달 가능한 객체를 걷고 (2) 다음 모든 객체 참조에 대해 ObjectSpace를 걷고 삭제합니다 표시되지 않았습니다. 오래 살았던 클래스와 모듈이되어 당신의 레일 응용 프로그램에서 http://blog.evanweaver.com/articles/2009/04/09/ruby-gc-tuning/

유일한 것들 : 여기

는 GC 메모리 문제를 디버깅의 주제에 몇 가지 독서입니다. 그걸 염두에두고 보는 몇몇 장소는 다음과 같습니다

1)이 액티브 레코드 인스턴스가 멀리 어떻게 든 3) 활성 기록 데이터베이스 연결 풀에서에 개최되는 랙 미들웨어 캐시되는) 이 변수 클래스에서 squirreled되고있다 4) 루비 파이널 라이저를 사용하고 있습니까? (잘못 사용하면 메모리 누수로 악명이 높습니다) eigenclass.org/hiki/deferred-finalizers-in-Ruby

죄송합니다. 나는 수많은 아이디어와 솔루션을 게시하고 있습니다. 희망이 당신을 몇 가지 새로운 방향으로 생각하게합니다.

축복, TWP

+0

우리는이 대답에 대한 업데이트를받을 수 있습니까? 이 기사는 일부 패치와 관련이 있지만 루비 1.8을위한 것이다. 정말 고마워! –

관련 문제