25

Sto eseguendo un'applicazione Ruby on Rails su un server Linux virtuale con un limite di 1 GB di RAM. Attualmente, sto costantemente raggiungendo il limite e vorrei ottimizzare l'utilizzo della memoria. Un'opzione che sto osservando è la riduzione del numero di lavoratori di unicorno.Unicorno: quale numero di processi di lavoro utilizzare?

Allora, qual è il modo migliore per determinare il numero di lavoratori unicorno da usare?

L'impostazione attuale è di 10 lavoratori, ma il numero massimo di richieste al secondo ho visto su Google Analytics in tempo reale è 3 (solo ha segnato una volta all'ora di punta, nel 99% delle volte non andare sopra 1 richiesta al secondo).

così è un salvataggio presupposto che posso - per ora - andare con 4 operai, lasciando spazio per importi imprevisti di richieste? Quali sono le metriche che dovrei dare un'occhiata per determinare il numero di lavoratori e quali sono gli strumenti che posso usare per quello sulla mia macchina Ubuntu?

risposta

42

La quantità di lavoratori si dovrebbe usare dipende in gran parte ciò che la vostra applicazione stessa sta facendo e come ofter che sta facendo queste cose. Non c'è davvero una formula di rapporto perfetto per questo sfortunatamente che funzionerà in ogni singolo caso di test. Questo diventa ancora più vero quando si tiene conto del fatto che si dispone di una quantità limitata di RAM su cui tenere il server acceso.

Molti suggeriranno che CPU Core Count + 1 ma non è corretto. Dovrai fare test case con diverse quantità di lavoratori presenti e vedere come vanno le cose. Assicurati di controllare i registri regolarmente.

Nel nostro team usiamo un programma chiamato Nagios: http://www.nagios.org

Funziona bene e può controllare il server per molte cose diverse che possono essere accadendo e anche avvisare l'utente di loro. Questo può aiutarti molto quando cerchi di trovare l'equilibrio perfetto.

Inoltre, a volte ci sono cose che il server sta facendo oltre che semplicemente, in esecuzione le istanze di rotaie, potrebbe essere in esecuzione di script o di elaborazione delle informazioni che non è necessario. Assicurati che il tuo server non stia facendo cose che non ha bisogno di fare, in questo modo risparmi più cicli di CPU e RAM possibili.

Inoltre, assicurarsi che si sta implementando questa caratteristica che Unicorn ha, che facciamo nei nostri progetti, ed è prezioso:

memoria Crescita Quando un lavoratore sta usando troppa memoria, dio o Monit può inviarlo un segnale QUIT. Questo dice al lavoratore di morire dopo aver terminato la richiesta corrente. Non appena il lavoratore muore, il master si biforca di uno nuovo che è immediatamente in grado di servire le richieste. In questo modo, non è necessario che il numero di telefono della richiesta di connessione sia pari a . - Tratto da: https://github.com/blog/517-unicorn

Ho trovato anche questa domanda simile che potrebbe dare qualche informazione:

https://serverfault.com/q/369811/110682

Mi auguro che aiuta.

+0

Grazie mille per la risposta perspicace e il tempo impiegato per scrivere questo. Lo trovo molto utile! – emrass

+0

@ blackbird07 Prego, sono contento di essere stato in grado di aiutarti. Buona fortuna con l'ottimizzazione della memoria. –

Problemi correlati