2009-10-03 7 views
3

Pardonnez la question du type newbie mais, qu'est-ce qui détermine la RAM consommée par les rails et MySQL (mon serveur est Ubuntu)? Avec à peine toutes les demandes venant dans le serveur semble planer autour de 1,5 de 2 Go. MySQL a environ 100 Mo de données stockées dans celui-ci. Le site compte environ 3500 utilisateurs enregistrés et lorsque le trafic est élevé, la mémoire a tendance à atteindre environ 1,8 Go. Lorsque le trafic est faible ou inexistant, il ne baisse pas beaucoup cependant. Quels sont les principaux facteurs de la consommation de RAM en ce qui concerne les déploiements de RoR?Qu'est-ce qui détermine l'utilisation de la mémoire sur Ubuntu avec Rails et MySQL?

J'aurais supposé la taille de DB mais ma taille de DB est loin de ma consommation de RAM (mais c'est peut-être la mauvaise façon d'y penser?).

Quelqu'un peut-il me diriger vers une bonne ressource à ce sujet, ou m'expliquer ici?

Merci.

Répondre

1

EngineYard avait un good blog post qui traite de certaines sources potentielles de problèmes de mémoire dans Rails. Comment allez-vous servir votre site? (Passenger? Mongrel?)

+0

Passager. J'ai une tranche de 2 Go (slicehost) – chrishomer

+0

Encore quelques questions: Quelle version de Ruby? Quel est votre PassengerMaxPoolSize? Nginx ou Apache? Je suppose qu'il y a quelque chose dans le blog que j'ai lié qui pourrait vous aider, mais les informations supplémentaires ne pourraient pas faire de mal. –

+0

ruby ​​1.8.7 Apache PassengerMaxPoolSize -> Je n'ai pas défini cela (donc 6?), Mais maintenant que je le cherche, peut-être que je devrais? – chrishomer

2

J'analyse quelle est la configuration la plus mince dans un serveur Ubuntu pour exécuter mon application Rails 3.2.6 avec l'empreinte mémoire la plus faible avec la configuration Nginx + Unicorn. Et en utilisant une base de données locale postgres. Après avoir supprimé de nombreux services comme whoopsie et apparmor dans ubuntu, et ne laisser que les processus de base, je peux instancier mes travailleurs des deux côtés, nginx et licorne pour un total de 500MB.

Ceci est purement le lancement de l'application à la vanille. avec une seule connexion à la base de données. Ceci est le résultat des commandes exécutées à l'état initial avec le premier utilisateur:

$ free -mt 
      total  used  free  shared buffers  cached 
Mem:   3001  550  2450   0   16  178 
-/+ buffers/cache:  355  2646 
Swap:   952   0  952 
Total:  3954  550  3403 

$ ps -ef | grep nginx 
root  1232  1 0 12:54 ?  00:00:00 nginx: master process /usr/sbin/nginx 
www-data 1233 1232 0 12:54 ?  00:00:00 nginx: worker process 
www-data 1234 1232 0 12:54 ?  00:00:00 nginx: worker process 
www-data 1235 1232 0 12:54 ?  00:00:00 nginx: worker process 
www-data 1236 1232 0 12:54 ?  00:00:00 nginx: worker process 
herminio 5292 1078 0 13:24 pts/1 00:00:00 grep nginx 

$ ps -ef | grep unicorn 
herminio 4863  1 0 13:01 ?  00:00:00 unicorn_rails master -c unicorn.rb -D -E production               
herminio 4866 4863 2 13:01 ?  00:00:34 unicorn_rails worker[0] -c unicorn.rb -D -E production                           
herminio 5296 1078 0 13:24 pts/1 00:00:00 grep unicorn 

$ ps -ef | grep postg 
postgres 935  1 0 12:54 ?  00:00:00 /usr/lib/postgresql/9.1/bin/postgres -D /var/lib/postgresql/9.1/main -c config_file=/etc/postgresql/9.1/main/postgresql.conf 
postgres 940 935 0 12:54 ?  00:00:00 postgres: writer process                          
postgres 941 935 0 12:54 ?  00:00:00 postgres: wal writer process                         
postgres 942 935 0 12:54 ?  00:00:00 postgres: autovacuum launcher process                      
postgres 943 935 0 12:54 ?  00:00:00 postgres: stats collector process                       
postgres 5215 935 0 13:12 ?  00:00:00 postgres: user_db pto_db_prod 127.0.0.1(47118) idle                  
herminio 5300 1078 0 13:24 pts/1 00:00:00 grep postg 

Avec ces informations, je peux déterminer que mon OS utilise 92 processus pour héberger mon application avec 1 connexion, que plusieurs processus sont spawn de Nginx et Unicorn le nombre de processus augmente +1 ainsi que les connexions à la base de données.

En examinant l'utilisation de la mémoire par processus, vous pouvez également déterminer la consommation de mémoire de votre application. J'utilise un vieil ordinateur portable pour baseline mon application, et il a seulement 3 Go de mémoire. Dans l'avenir, je prévois de publier cette application, dans un environnement distribué avec des serveurs à faible spécification, donc je veux savoir précisément l'empreinte de tout dans mon application rails.

Certaines des choses que j'apprends le long du chemin sont:

paquet installer --without # test de développement Pour vous assurer que vos utilisations d'applications et charges Gems qui ne sont utilisés dans l'environnement de production et non plus.

Assurez-vous de ne charger que les modèles ActiveRecord dont votre requête a besoin et pas plus.

Questions connexes