Nous avons une application Web (développée par un tiers) qui s'exécute sur Tomcat. Nous obtenons de très mauvaises performances de l'application. Le développeur de l'application prétend que c'est une bonne pratique de l'industrie de redémarrer les serveurs Web tous les soirs, de libérer toute la mémoire et de recommencer.
Du point de vue des clients qui atténue leur problème de plantage du site pendant la journée, mais du point de vue de SysAdmin, c'est une terrible solution.
Nous hébergeons 20 de ces applications sur différents serveurs pour différents clients, et la coordination pour s'assurer que tous sont redémarrés chaque nuit semble tout simplement fausse.
Réponses:
Ce n'est certainement pas une meilleure pratique. Bien qu'il soit bon de redémarrer périodiquement vos serveurs juste pour vous assurer que tout fonctionne correctement, le fait de devoir redémarrer tous les soirs indique une fuite de mémoire très grave dans l'application.
la source
Il y a une différence entre les «meilleures pratiques», les choses que beaucoup de gens font pour de bonnes raisons, et les «pratiques courantes», les choses que beaucoup de gens font parce qu'ils sont paresseux et / ou ignorants.
Les applications et (pire) les serveurs qui doivent être régulièrement redémarrés ou redémarrés pour continuer à bien fonctionner sont assez courants. Mais c'est aussi une indication claire que vous avez un bug critique.
En le rendant SOP pour redémarrer une application régulièrement, votre entreprise cache un bug sérieux sous le tapis. C'est inexcusable, le bug doit être face cachée et écrasé, ou il reviendra vous mordre plus tard.
Idéalement, votre entreprise devrait trouver un meilleur développeur. Malheureusement, cela peut entraîner beaucoup de travail pour réécrire de grandes parties de votre code. Le fait que le développeur pense que du code mal écrit est acceptable ou n'en sait pas assez pour reconnaître les symptômes du code bogué suggère que la qualité du code est faible. Un bon développeur sera constitutionnellement incapable de le laisser dans cet état.
Étant donné que vous n'êtes peut-être pas en mesure de remplacer le développeur, quelques suggestions:
Même sans entrer dans les outils de profilage orientés développeur, il existe de nombreux outils orientés sysadmin pour le profilage et la surveillance de l'utilisation de la mémoire sur les applications Java. Vous devez vraiment configurer la surveillance de la mémoire (en particulier le tas) sur vos serveurs de production dans tous les cas. Je recommanderais cela même si vous exécutez un code de qualité. Il peut vous avertir à l'avance lorsque vos applications de buggy sont sur le point de basculer.
Mais mieux encore, ceux-ci devraient vous aider à rassembler des preuves de fuite et peuvent même indiquer où se situe le problème dans l'application. Cela vous donnera de meilleures munitions pour faire pression pour qu'elles soient réparées.
la source
Le développeur de l'application prétend plus probablement qu'il est dans son intérêt de vous couvrir le cul en travaillant autour du travail non professionnel qu'il a fait. Il a peut-être cessé d'admettre qu'il avait écrit quelque chose avec une énorme fuite de mémoire, mais pas très loin.
la source
De nombreuses réponses semblent ici bien loin de la marque des solutions pratiques. Ils semblent éviter le dogme - les serveurs ne doivent jamais être redémarrés - pourquoi avons-nous 5 neuf? tolérance aux pannes? Eh bien, alors quand ils sont censés être debout, ils restent debout.
En outre, affirmer que c'est la cause des mauvais développeurs ou des mauvaises pratiques de développement ne va pas à la racine du problème. Il peut être, mais le plus souvent, son code d'application pas mal. Ces problèmes sont déjà intégrés dans une grande partie du code système. Petites fuites de mémoire, problèmes de tas Java et de permgen si vous exécutez beaucoup de petites applications comme nous. Les serveurs modernes et les logiciels qu'ils exécutent sont très complexes. Lorsque vous pensez à ce qu'un serveur comme Tomcat doit faire - servir des fichiers, traiter des requêtes Web, des communications réseau, des communications de base de données, etc., il fait beaucoup. Dans cette pile, il y a beaucoup de pièces mobiles.
Le redémarrage proactif des serveurs permet de dire qu'une fois par semaine ou par mois est intelligent et efficace à mon avis. Si vous êtes en cluster et que vous faites pivoter les serveurs, vous ne devez pas affecter les clients un bit. Les clients seront beaucoup plus satisfaits des performances de vos serveurs.
la source
Les serveurs OMI doivent être arrêtés le moins possible. Il est plus probable que le développeur d'applications ait construit une application de mauvaise qualité avec une fuite de mémoire.
la source
J'ai un script qui redémarre l'un de nos serveurs Web tous les soirs, mais c'est plus à cause d'une application java mal écrite plutôt que d'une norme de l'industrie. Je dirais cependant qu'il n'est pas rare de redémarrer les services Web. Cela pourrait effectuer le nettoyage de la mémoire que vous recherchez et mettre moins de pression sur le serveur par rapport à un redémarrage complet.
la source
Un serveur ne doit de préférence jamais être redémarré. C'est l'une des raisons pour lesquelles nous avons une tolérance aux pannes . Si vous devez redémarrer votre serveur à cause de vos applications, vos applications perdent de la mémoire et sont mal construites.
J'ai déjà travaillé avec Tomcat, et j'ai eu le même problème, la prochaine fois que je travaillerai avec un conteneur Java, j'en chercherai un autre, peut-être JBoss ou GlassFish.
Edit: Si vous devez le redémarrer tous les soirs maintenant, vous devrez probablement le redémarrer plus souvent si / lorsque la charge augmente. Assurez-vous d'avoir des applications solides, c'est la meilleure solution.
la source
La plus fréquente que j'aie jamais vue est hebdomadaire. Où je suis maintenant, nous sommes un magasin Windows, et nous le faisons tous les mois le week-end suivant le Patch Tuesday.
la source
Bien que je convienne qu'il n'est pas idéal de redémarrer un serveur en permanence, il y a des situations où ce n'est ni la faute du développeur ni la mauvaise chose à faire. Nous avons une application qui se comporte bien et qui fuit de la mémoire en raison de problèmes dans la bibliothèque Python Popen. Il s'agit d'une ancienne application qui sera bientôt supprimée, mais elle est critique pour l'entreprise. Nous devons le faire fonctionner avec un minimum de tracas pour nos clients. Nous avons donc décidé de redémarrer le serveur tous les soirs.
la source