Question

J'ai un Rails 2.3.8 application hébergée et en cours d'exécution sur slicehost (256M). Je ne connais pas du tout avec l'arrière-plan, je essentiellement suivi les étapes des tutoriels Slicehost installer Apache. L'utilisation de la mémoire étant très élevé, je puis changé mon fichier de configuration Apache pour réduire le nombre de MaxClient à 10 ... mais ma tranche est encore swapping.

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 grosse, mais pour l'instant je presque pas de circulation sur cette application, donc je pense qu'il est plus un problème avec ma configuration ou peut-être mon code?

Les recommandations concrètes seraient les bienvenus! Merci

Était-ce utile?

La solution

Il semble que votre application utilise des rails tout votre mémoire disponible. Je recommande trois choses:

  1. Mettre à niveau la mémoire sur votre serveur. 256MB 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) vs combien de temps il faudra pour traquer les problèmes de performance.

  2. Profil votre application pour déterminer quelles demandes consomment le plus de mémoire. Cela va probablement être des endroits où vous trouvez un grand nombre de dossiers et, éventuellement, y compris des tables associées aussi. Il y a quelques outils là pour vous aider à réduire les zones de trouble possibles. Je l'ai utilisé Oink mais il y a certainement d'autres. Une fois que vous savoir où sont les problèmes, vous pouvez faire quelques ajustements pour essayer de réduire l'utilisation de la mémoire.

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

Autres conseils

En bref, 256MB est serré pour une application Rails. Vous ne donnez pas vraiment de détails sur la façon dont vous rails de roulement, mais je suppose que vous utilisez Apache avec le module passagers. Le module de passagers peut être configuré sur le nombre de cas, il continue de fonctionner. Vous avez 4 cas de rubis en cours d'exécution sous le compte web-app. Je suppose que ceux qui viennent de passagers. Dans la configuration, vous pouvez limiter le nombre d'instances mises en chantier de passagers. Cela permettra de réduire les besoins en mémoire.

D'autre part, lorsque l'application de travail avec seulement 256 Mo, et lorsque vous accueillez seulement 1 rails, il pourrait être préférable d'opter pour une autre configuration. La configuration que je me suis servi avant était un serveur web Nginx, et un cluster bâtarde avec 2 roquets (sur 192 Mo, et l'application est uniquement à des fins d'essai). Fondamentalement, cela veut dire que à un moment donné, on peut traiter les deux (et seulement deux rails) des requêtes en parallèle. La configuration est peut-être un peu plus dur que Apache + passager, mais certainement pas difficile. Je pense que c'est une solution plus performante lorsque vous tenez le 256MB.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top