2010-12-09 26 views
1

J'ai une application Rails 2.3.8 hébergée sur slicehost (256M). Je ne suis pas du tout familier avec le back-end, j'ai fondamentalement suivi les étapes des tutoriels slicehost pour installer Apache. L'utilisation de la mémoire étant très élevée, j'ai alors changé mon fichier conf Apache pour réduire le nombre MaxClient à 10 ... mais ma tranche est encore en train d'échanger.Problème de permutation pour l'application Rails sur l'hôte de partition

Voici ce que l'utilisation de la mémoire je reçois après seulement quelques clics sur mon site:

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         

Je ne sais pas quoi faire ... Je pourrais passer à une plus grande tranche mais pour l'instant Je n'ai presque pas de trafic sur cette application, donc je pense que c'est plus un problème avec ma configuration ou peut-être mon code?

Toute recommandation concrète serait la bienvenue! Merci

+0

Utilisez-vous Passenger (mod_rails)? Si oui, utilisez-vous également Ruby Enterprise Edition? – Brian

+0

Je ne pense pas que j'utilise Ruby Enterprise Edition ... Pour Passenger, j'ai la gemme installée mais je ne suis pas sûre de l'utiliser (quelqu'un m'a aidé à configurer ma tranche ...). Comment puis-je vérifier si je suis? – alex

Répondre

1

Il semble que votre application rails utilise toute votre mémoire disponible. Je recommanderais trois choses:

  1. Mettez à niveau la mémoire sur votre serveur. 256 Mo n'est pas beaucoup pour une application Rails. Aller à 512 peut alléger votre problème. Si cela résout, vous devez alors considérer le coût supplémentaire (18 $/mois) par rapport au temps qu'il faudra pour dépister les problèmes de performance.

  2. Affectez votre application pour déterminer quelles demandes consomment le plus de mémoire. Cela va probablement être des endroits où vous trouverez beaucoup d'enregistrements et éventuellement y compris certaines tables associées. Il existe quelques outils pour vous aider à réduire les zones de problèmes possibles. J'ai utilisé oink mais il y en a certainement d'autres. Une fois que vous avez compris où sont les problèmes, vous pouvez faire quelques réglages pour essayer de réduire l'utilisation de la mémoire.

  3. En supposant que vous utilisez Passenger avec Apache, vous pouvez réduire le nombre de demandes simultanées dans le fichier de configuration Passenger. Cela peut être utile pour que https://serverfault.com/questions/15350/running-ruby-on-rails-app-on-apache-passenger-to-much-memory

+0

j'ai mis à jour ma tranche et tout fonctionne parfaitement maintenant ... Je vais aussi essayer de limiter le nombre de processus de rails commencés suite au lien que vous avez envoyé. Merci! – alex

1

En bref, 256MB est serré pour une application Rails. Vous n'avez pas vraiment donné de détails sur la façon dont vous utilisez les rails, mais je suppose que vous utilisez Apache avec le module Passenger. Le module Passenger peut être configuré sur le nombre d'instances qu'il continue à exécuter. Vous avez 4 instances ruby ​​sous le compte de l'application Web. Je suppose que ceux-ci viennent de passagers. Dans la configuration, vous pouvez limiter le nombre d'instances démarrées par Passenger. Cela réduira les besoins en mémoire. D'autre part, lorsque vous travaillez avec seulement 256 Mo, et lorsque vous n'hébergez que des applications 1 rails, il vaudrait peut-être mieux opter pour une autre configuration. La configuration que j'ai utilisée auparavant était un serveur web Nginx, et un cluster mongrel avec 2 mongrels (sur 192 Mo, et l'application était uniquement à des fins de test). Fondamentalement, cela signifie qu'à tout moment, vous pouvez traiter 2 (et seulement 2) demandes de rails en parallèle. La configuration est peut-être un peu plus difficile qu'Apache + Passenger, mais certainement pas difficile. Je pense que c'est une solution plus performante quand on reste avec les 256 Mo.

+0

Vous aviez raison: 256 Mo était très serré. J'ai mis à jour à 512 Mo et tout fonctionne comme un charme maintenant! – alex