2012-06-15 11 views
11

Servo il mio software usando il passeggero. Genera molti processi di rubino.Usare dio solo per uccidere

A volte uno di questi rubini diventa gonfio e voglio che muoia.

Speravo di usare Dio per questo intento. La mia idea era di monitorare tutti questi rubini e se consuma più di 500 MB di memoria per 3 cicli, dio dovrebbe cercare di ucciderlo con grazia. Se rimane in vita per più di 5 minuti, allora Dio dovrebbe ucciderlo non con grazia.

Mi sembra che Dio cerchi sempre di eseguire nuovamente il servizio, quindi ci obbliga a fornire un comando di avvio. È possibile usare Dio solo per uccidere i processi male comportati e lasciare che lo spawner del passeggero li riporti a vivere quando è necessario?

risposta

4

La risposta alla tua domanda si trova nella domanda stessa. puoi uccidere i processi ruby ​​usando god gem che è il framework del processo del processo di ruby ​​creato da github guys.

in fondo, ecco come funziona:

  1. configure dio per monitorare processo può essere qualsiasi cosa, da apache, passeggero, bastardo o semplicemente semplice file di fare un lavoro di lunga durata.
  2. Imposta condizionali nel file di configurazione di dio in base al quale dio eseguirà un codice predefinito.

Ecco un semplice esempio (tratto da docs). considerare questo come processo in esecuzione di file lunghi che corre undefiantly cui vogliamo monitorare l'utilizzo della memoria, consente di chiamare simple.rb

loop do 
    puts 'Hello' 
    sleep 1 
end 

ora, installiamo il god gemma & configurarlo per come l'esecuzione come utente root in modo che possa uccidere/generare i processi e successivamente creare un file di configurazione. esempio (tratto anche da docs):

God.watch do |w| 
    w.name = "simple" 
    w.start = "ruby /full/path/to/simple.rb" 
    w.keepalive(:memory_max => 500.megabytes) 
end 

Qui, come avrete avuto l'idea, se l'utilizzo della memoria processo va sopra 500 megabyte, Dio riavviarlo. qui ci sono poche risorse che potrebbero aiutare, se si è iniziato con la gestione dei processi utilizzando god gemma:

Ora, ricordate ALL con la figurazione per god è in realtà un codice ruby ​​legale, quindi puoi essere creativo & fare ogni genere di cose.

, infine, se si sono spesso trovarsi in esecuzione processo lungo in esecuzione, vi consiglio di provare JRuby quali è funziona molto meglio con i processi di esecuzione prolungata a causa di JVM & molto più veloce di risonanza magnetica

2

utilizzare la stessa impostazione su molti dei miei progetti e ho avuto la stessa perdita di memoria.Dopo aver lavorato con il monitoraggio, abbiamo deciso di utilizzare le funzionalità del passeggero per affrontarlo. Specificamente consente l'impostazione (ad es.) PassengerMaxRequests 300 che arresta qualsiasi istanza quando ha scontato quel numero di richieste.

Se lo si utilizza, assicurarsi che PassengerMinInstances sia impostato su 0 perché precede l'impostazione per le richieste massime.