Scambiare problema per Rails app su slicehost
-
10-10-2019 - |
Domanda
Ho un Rails 2.3.8 app ospitato e in esecuzione su slicehost (256M). Non ho una conoscenza a tutti con il back-end, ho praticamente seguito i passi da tutorial Slicehost da installare Apache. L'utilizzo della memoria in fase molto alto, allora ho cambiato il mio file di configurazione di Apache per ridurre il numero MaxClient a 10 ... ma la mia fetta è ancora swapping.
Ecco quello che l'utilizzo della memoria ottengo dopo pochi clic sul mio sito:
top - 23:57:12 up 28 min, 2 users, load average: 0.43, 0.54, 0.30
Tasks: 79 total, 1 running, 78 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 97.8%id, 0.1%wa, 0.0%hi, 0.0%si, 2.0%st
Mem: 262364k total, 258656k used, 3708k free, 260k buffers
Swap: 524280k total, 262772k used, 261508k free, 6328k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4004 web-app 20 0 178m 72m 1888 S 0 28.4 0:04.38 ruby1.8
4001 web-app 20 0 172m 61m 1932 S 0 24.2 0:02.72 ruby1.8
3941 root 20 0 164m 57m 1672 S 0 22.5 0:21.44 ruby
3990 web-app 20 0 209m 21m 1696 S 0 8.4 0:18.00 ruby1.8
3950 web-app 20 0 165m 7464 1548 S 0 2.8 0:20.40 ruby1.8
3684 mysql 20 0 224m 6504 2084 S 0 2.5 0:14.34 mysqld
3938 root 20 0 53632 3048 1036 S 1 1.2 0:01.50 starling
3839 root 20 0 243m 1456 1248 S 0 0.6 0:00.34 apache2
3897 www-data 20 0 243m 1452 1072 S 0 0.6 0:00.04 apache2
3894 www-data 20 0 243m 1368 1008 S 0 0.5 0:00.04 apache2
3895 www-data 20 0 243m 1220 960 S 0 0.5 0:00.02 apache2
3888 root 20 0 46520 1204 1100 S 0 0.5 0:02.29 ruby1.8
3866 root 20 0 17648 1184 896 S 0 0.5 0:00.08 bash
3896 www-data 20 0 243m 1180 952 S 0 0.4 0:00.00 apache2
3964 www-data 20 0 243m 1164 956 S 0 0.4 0:00.02 apache2
3892 www-data 20 0 243m 1132 956 S 0 0.4 0:00.00 apache2
3948 www-data 20 0 243m 1132 956 S 0 0.4 0:00.00 apache2
3962 www-data 20 0 243m 1132 956 S 0 0.4 0:00.02 apache2
3963 www-data 20 0 243m 1132 956 S 0 0.4 0:00.00 apache2
3965 www-data 20 0 243m 1080 888 S 0 0.4 0:00.00 apache2
3887 root 20 0 89008 960 796 S 0 0.4 0:00.00 ApplicationPool
Non sono sicuro di cosa fare dopo ... ho potuto effettuare l'aggiornamento a una fetta più grande, ma per ora non ho quasi senza traffico su questa applicazione, quindi penso che sia più un problema con la mia configurazione o forse il mio codice / p>
Tutti i consigli concreti sarebbe il benvenuto! Grazie
Soluzione
Sembra che i tuoi rotaie app utilizza tutta la memoria disponibile. Suggerirei tre cose:
-
Aggiornamento della memoria sul server. 256 non è molto per un'applicazione Rails. Andando a 512 può alleviare il problema. Se che risolve, è quindi necessario prendere in considerazione il costo aggiuntivo ($ 18 / mo) vs quanto tempo ci vorrà per rintracciare i problemi di prestazioni.
-
Profilo vostra applicazione per capire quali richieste stanno consumando la maggior parte della memoria. Questo è probabile che a essere luoghi in cui si sta trovando un sacco di dischi e, eventualmente, tra cui alcune tabelle associate troppo. Ci sono un paio di strumenti là fuori per aiutare a restringere le possibili zone di difficoltà. Ho usato Oink ma ci sono sicuramente altri. Una volta a capire dove sono i problemi, si possono fare alcune modifiche per cercare di ridurre l'utilizzo della memoria.
-
Supponendo che si sta utilizzando per passeggeri con Apache, è possibile ridurre il numero di richieste simultanee nel file di configurazione del passeggero. Questo potrebbe essere utile per questo https: // serverfault.com/questions/15350/running-ruby-on-rails-app-on-apache-passenger-to-much-memory
Altri suggerimenti
In breve, 256 MB è stretto per un'applicazione Rails. Non hai davvero dare qualsiasi specifiche su rotaie come in esecuzione, ma suppongo che si sta utilizzando Apache con il modulo del passeggero. Il modulo del passeggero può essere configurato su quanti casi si continua a funzionare. Hai 4 istanze rubino in esecuzione con l'account web-app. Credo che coloro che provengono da passeggeri. Nella configurazione, è possibile limitare il numero di avviamenti istanze passeggeri. Ciò consentirà di ridurre i requisiti di memoria.
D'altra parte, quando si lavora con solo 256 MB, e quando si è solo di hosting applicazione 1 binari, potrebbe essere meglio andare per un'altra impostazione. La messa a punto che io stesso usato prima era un server web Nginx, e un gruppo meticcio con 2 meticci (su 192MB, e l'applicazione è stato solo a scopo di test). In pratica questo significa che in qualsiasi momento, è possibile elaborare 2 (e solo 2) rotaie richieste in parallelo. La messa a punto è forse un po 'più difficile di quanto Apache + passeggero, ma sicuramente non è difficile. Penso che sia una soluzione più performante quando si bastone con il 256.