2012-11-13 10 views
7

Abbiamo un'app di grandi binari e da alcuni giorni, uno per uno, il nostro processo di ruby ​​sembra bloccare in un ciclo e mangiare il 100% della CPU fino al passeggero il server muore sollevando 502 errori.Modi per capire perché un blocco di processo rubino al 100% CPU

Conosci i modi migliori per capirlo perché?

Ho provato New Relic ma sono solo le prestazioni e i nostri errori sono troppo numerosi per cercare di indovinare qual è il problema. (Abbiamo un sacco di richiesta di un giorno e un sacco di errori UTF-8 BSON perché stiamo usando UTF-8 URL)

Usando:

  • Rails 3.2.6 con Ruby 1.9.2p290
  • passeggeri 3.0.13
  • MongoDB 2.0.1 con Mongoid 2.4.11
  • Nginx
  • FreeBSD 8,2

risposta

8

Un modo pratico per scoprire dove il rubino è bloccato è quello di collegare gdb al processo in esecuzione e call rb_backtrace(). Ciò stamperà la traccia dello stack corrente su stderr, che è probabilmente diretto a un file di registro. Ecco un short walk through che ho trovato su un blog. La traccia dello stack dovrebbe aiutarti a localizzare dove il processo è bloccato e ti consente di capire cosa sta succedendo tramite l'ispezione del codice o aggiungendo la strumentazione di registrazione attorno al percorso del codice critico.

Aman Gupta ha una libreria da gdb a ruby ​​hook gdb.rb A volte ho trovato utile.

+0

wahoo, esattamente quello che stavo cercando, grazie! – Hartator

Problemi correlati