34 votes

Qu'est-ce qu'un conteneur de servlets java léger et rapide ?

J'ai écrit un serveur web en java pur spécialement adapté à un site web que je suis en train de créer. J'en ai eu assez de réinventer la roue, et j'envisage maintenant de passer aux servlets java. En fait, je veux simplement exécuter du code java côté serveur tout en tirant parti de la technologie des servlets pour éviter d'écrire du code spécifique au protocole http.

Ce serait également bien s'il était facile de conserver une partie du contrôle fin que j'avais lorsque j'écrivais le serveur à partir de zéro (comme spécifier quelles URLs font quoi, et être capable de spécifier où les médias sont lus et écrits sur le disque).

Il semble que Tomcat soit le conteneur le plus populaire, mais il semble supporter beaucoup plus que ce dont j'ai besoin. Existe-t-il une meilleure solution pour les utilisations non entreprenantes ?

35voto

non sequitor Points 4092

Très certainement Jetée

Jetty fournit un serveur Web et un conteneur javax.servlet, ainsi qu'une prise en charge de SPDY, WebSocket, OSGi, JMX, JNDI, JAAS et bien d'autres encore. intégrations. Ces composants sont open source et disponibles pour l'utilisation commerciale et la distribution.

14voto

karlgrz Points 3543

Tomcat fonctionne très bien, même pour les solutions "non professionnelles". Je suis sur mon téléphone mais je fournirai d'excellentes raisons lorsque j'aurai un PC plus tard. Il est très stable si vous le configurez correctement et fonctionne assez bien "en l'état".

UPDATE :

Depuis quelques années, je fais tourner un serveur Tomcat avec environ 25 applications web J2EE de complexité variable. Le serveur est une machine SPARC Dual Core 2.0GHz, 2 Go de RAM et fonctionne sous Solaris. L'administrateur précédent du serveur (qui ne fait plus partie de notre société) n'a rien fait pour reconfigurer l'instance Tomcat par défaut. En conséquence, les performances de certaines de nos applications à forte intensité d'E/S étaient plutôt médiocres en raison des contraintes de mémoire. L'instance par défaut de Tomcat (je crois) n'alloue que 64 Mo de mémoire, ce qui ne demande que des exceptions OutOfMemory (et nous en avons connu pendant un certain temps). Notre département s'est contenté de continuer et a accepté de redémarrer le serveur chaque jour comme une "procédure". Ugh.

Lorsqu'il est parti, j'ai été chargé de configurer notre serveur Tomcat et j'ai passé un certain temps à chercher comment le configurer correctement pour notre environnement. J'ai découvert que j'avais seulement besoin d'ajouter quelques nouveaux arguments au script script afin de transformer Tomcat en un environnement très stable et très rapide. La ligne suivante existe dans catalina.sh (autour de la ligne 112 sur une installation par défaut de Tomcat 6.0.18) :

CATALINA_OPTS=" $CATALINA_OPTS"

J'ai modifié la ligne pour qu'elle se lise comme suit :

CATALINA_OPTS="-server $CATALINA_OPTS -Xms512m -Xmx2048m -XX:MaxPermSize=512m -Dcom.sun.management.jmxremote"

Explication :

  • -server : Cela permet au conteneur d'agir comme un serveur dédié.
  • -Xms512m : Fixe la taille initiale du tas à 512 Mo (1/4 de la quantité de mémoire du serveur). Vous pouvez jouer avec cette valeur, puisque l'opération de changement de la taille du tas a une pénalité de performance, donc définissez-la à une valeur qui sera dans la gamme de votre utilisation normale.
  • -Xmx2048 : Fixe la taille maximale du tas à 2GB (la quantité de mémoire sur le serveur). Cela devrait être maximisé si votre machine est un serveur dédié pour obtenir le meilleur de votre environnement, j'ai trouvé.
  • -XX:MaxPermSize=512m : Génération permanente maximale. J'ai fixé cette valeur à la taille initiale du tas.
  • -Dcom.sun.management.jmxremote : J'ajoute ceci pour activer ce fichier jar par les applications sur le serveur. Je l'utilise pour pouvoir exécuter le Sonde Lambda que j'aime beaucoup pour l'analyse de mon serveur.

Avec cette ligne supplémentaire, notre serveur est passé de 1 à 2 fois par jour pendant une journée chargée à une connexion stable sans redémarrage pendant les 20 derniers jours depuis que j'ai mis en place cette configuration.

11voto

J'ai intégré le serveur web Jetty dans les composants de notre serveur de services web et j'en suis très satisfait.

J'ai été surpris en découvrant que Hudson utilise Winstone - http://winstone.sourceforge.net/ - mais cela fonctionne très bien. "Winstone est un petit, rapide et fonctionnel conteneur de servlet java v2.4 dans un seul fichier jar de 166kb".

Remarque : vous pourriez rapidement vous rendre compte que vous souhaitez pouvoir redéployer du code sans redémarrer le conteneur web. Je vous conseille vivement de trouver un conteneur web qui le permette - vous en aurez besoin un jour.

8voto

Winstone (mentionné par Thorbjørn) semble être le plus rapide, mais je ne sais pas quelles sont les caractéristiques de base.

Le prochain serait Jetée suivi de près par Tomcat .

4voto

Thomas Jung Points 17692

Jetée .

C'est assez petit. D'un autre côté, il est assez avancé. Par exemple, il supporte les applications web de type comète.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X