2012-11-13 12 views
7

Wir haben eine große Rails App und seit ein paar Tagen, einer nach dem anderen, scheint unser Rubin-Prozess in einer Schleife zu blockieren und essen 100% der CPU bis zum Beifahrer Server-Würfelerhöhung 502 erros.Wege zu verstehen, warum ein Rubin-Prozessblock bei 100% CPU

Kennen Sie die besten Möglichkeiten, um herauszufinden, warum?

Ich habe New Relic ausprobiert, aber es ist nur Leistung Zeug, und unsere Fehler sind zu zahlreich, um zu versuchen, zu erraten, was das Problem ist. (Wir haben eine Menge Antrag einen Tag und eine Menge UTF-8 BSON Fehler, weil wir UTF-8 URLs verwenden)

Verwendung:

  • Rails 3.2.6 mit Ruby-1.9.2p290
  • Passagier 3.0.13
  • MongoDB 2.0.1 mit Mongoid 2.4.11
  • Nginx
  • FreeBSD 8,2

Antwort

8

Ein praktischer Weg, um herauszufinden, wo Ihr Rubin steckt, ist die Verbindung gdb mit dem laufenden Prozess und call rb_backtrace(). Dadurch wird der aktuelle Stack-Trace auf stderr gedruckt, der wahrscheinlich in eine Protokolldatei geleitet wird. Hier ist ein short walk through Ich fand auf einem Blog. Der Stack-Trace sollte Ihnen dabei helfen, zu lokalisieren, wo sich Ihr Prozess befindet, und Sie können herausfinden, was mit der Code-Inspektion passiert, oder indem Sie Logging-Instrumente um den kritischen Code-Pfad hinzufügen.

Aman Gupta hat eine gdb Ruby-hooks-Bibliothek gdb.rb Ich habe handlich zu Zeiten gefunden.

+0

wahoo, genau das, was ich gesucht habe, danke! – Hartator