2009-03-08 7 views
19

mod_rails의 루비 인스턴스가 "불량"으로 처리됩니다. 이러한 프로세스는 더 이상 승객 상태에 나열되지 않으며 100 % CPU를 사용합니다.modrails - 100 % CPU를 소모하는 불량 루비 프로세스

인스턴스를 죽이기 위해 god/monit을 설치하는 것 외에는 아무도이 문제를 방지하는 방법에 대한 조언을 줄 수 있습니까? 로그에서 도움이되는 것을 찾을 수 없었습니다.

+0

첫 번째 요청에 대해 아파치를 다시 시작하면이 문제가 발생합니다. 프로세스가 제대로 실행되면 애플리케이션이 정상적으로 실행됩니다. 그러나 사이트에 오는 데는 10 분 (트래픽 없음)에서 3 ~ 6 시간 (트래픽 포함)까지 걸릴 수 있습니다. 이는 나를위한 선택 사항은 아니지만 진행 상황과 이유에 대해 알고 싶습니다. – Spasm

답변

9

Linux를 사용하는 경우 "strace"유틸리티를 설치하면 Ruby 프로세스가 모든 CPU를 사용하고 있는지 확인할 수 있습니다. 그러면 저수준의 견해를 얻을 수 있습니다. 패키지 관리자에서 사용할 수 있어야합니다. 그럼 당신은 할 수 있습니다 당신이 중간에 프로세스를 중지하고 스택 추적을 덤프하려는 경우

$ sudo strace -p 22710 
Process 22710 attached - interrupt to quit 
...lots of stuff... 
(press Ctrl+C) 

그런 다음, 당신은 특별히하고, http://eigenclass.org/hiki.rb?ruby+live+process+introspection에서 루비에서 GDB 사용에 대한 가이드를 따를 수 :

gdb --pid=(ruby process) 
session-ruby 
stdout_redirect 
(in other terminal) tail -f /tmp/ruby_debug.(pid) 
eval "caller" 

또한 원격 http://duckpunching.com/passenger-mod_rails-for-development-now-with-debugger

흥미 보이는 승객 인스턴스를 디버깅에 관심 Github에서의 프로젝트가 될 것 같다 설명 당신이 열 디버그 소켓에 연결하는 루비 - 디버그 보석을 사용할 수 있지만 documentat 이온이 부족합니다 : http://github.com/ddollar/socket-debugger/tree/master

+0

링크 죽었어. 누구 한테 복사본이있어? –

2

매우 긴 실행 SQL 쿼리로 이와 비슷한 것을 보았습니다.

MySQL은 쿼리가 실행 시간 제한을 초과했기 때문에 쿼리를 죽였고 스레드는 쿼리가 죽었다는 것을 결코 깨닫지 못했습니다.

데이터베이스 로그를 확인해야 할 수 있습니다.

+0

로그에서 어떻게 나타 납니까? 더 이상의 지표? –

4

유휴 상태 였을지라도 많은 CPU를 소비 한 Phusion Passenger와 관련된 루비 프로세스가 있습니다. this thread에 제안 내가

date -s "`date`" 

를 실행 한 후

이 문제는 멀리 갔다. (Debian Squeeze에 있었음)

분명히 문제는 윤초와 관련이 있으며, MySQL, Java 등 많은 다른 응용 프로그램에 영향을 줄 수 있습니다. 자세한 정보는 this thread on lklm.

+0

생명의 은인에게 감사드립니다! –

+0

환상적입니다, 감사합니다! 누군가이 시가를 줘! – Joe

관련 문제