À propos de combien de réduction de l’empreinte mémoire nginx donne-t-il à Apache2?

Je me demande si porter une application Rails d’Apache2 + Passenger à Nginx + Passenger en vaut la peine. La principale raison pour laquelle nous le ferions est de libérer de la mémoire vive ou de traiter davantage de demandes pour une quantité donnée de mémoire vive.

Est-ce que quelqu’un sait à peu près combien Nginx + Passenger est plus efficace avec la RAM?

La réponse dépend fortement de:

  • Les modules de serveur Web que vous avez activés
  • L’implémentation de Ruby que vous utilisez (par exemple, Ruby Enterprise Edition vs MRI)
  • Les modèles de trafic de votre application.

Mettre en place nginx + Passenger est vraiment facile. Installez simplement chaque environnement sur des serveurs cloud ou des machines virtuelles et exécutez des outils d’parsing comparative par rapport à eux.

En règle générale, cependant, le plus grand consommateur de RAM est votre application Rails, pas le serveur Web. Si vous êtes préoccupé par l’utilisation de la RAM, vous passerez mieux en comparant les implémentations Ruby ou en réduisant le nombre de gems / plugins / bibliothèques que votre code utilise, ou en réduisant le nombre de modules de serveur Web que vous utilisez.

Quelqu’un a effectué une évaluation de l’utilisation de la mémoire Nginx vs Apache par connexion simultanée. Nginx est le grand gagnant. Mais il convient de noter que la plus grande utilisation de la mémoire sur ce graphique est seulement ~ 40 Mo à environ 4 000 connexions simultanées. 40 Mo est un encombrement inférieur à celui d’une seule instance de Rails dans la plupart des cas, et il est peu probable que vous puissiez atteindre 4 000 demandes de rails simultanés sur un seul serveur. Il est donc avantageux de passer à Nginx en second lieu, mais vous devez d’abord passer à Ruby Enterprise Edition si vous ne l’avez pas déjà fait, puis essayer de réduire l’encombrement mémoire de votre application, car votre application Rails utilisera beaucoup plus de mémoire les serveurs.

Par exemple, je lance Apache / Passenger / REE en production, et même avec l’empreinte mémoire améliorée de REE, mon application Rails utilise 13 fois plus de mémoire qu’Apache, comme l’indique la page passagers-memory .

le taux de croissance de l'utilisation de la mémoire par rapport aux connexions simultanées est nettement plus élevé avec apache