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.
Passager. J'ai une tranche de 2 Go (slicehost) – chrishomer
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. –
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