problème pour permutant application Rails sur slicehost
-
10-10-2019 - |
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
La solution
Il semble que votre application utilise des rails tout votre mémoire disponible. Je recommande trois choses:
-
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.
-
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.
-
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.