Wir haben eine Webanwendung (von einem Drittanbieter entwickelt), die auf Tomcat ausgeführt wird. Die Anwendung hat eine sehr schlechte Leistung erbracht. Der Anwendungsentwickler gibt an, dass es eine bewährte Methode der Branche ist, Webserver jede Nacht neu zu starten, um die gesamte Speichernutzung freizugeben und von vorne zu beginnen.
Aus der Sicht der Kunden, die das Problem des Absturzes der Site während des Tages lindert, ist dies jedoch aus Sicht von SysAdmin eine schreckliche Lösung.
Wir hosten 20 dieser Anwendungen auf verschiedenen Servern für verschiedene Clients, und die Koordination, sicherzustellen, dass alle Anwendungen jede Nacht neu gestartet werden, scheint einfach falsch.
Antworten:
Dies ist sicherlich keine bewährte Methode. Während es ist gut Ihre Server in regelmäßigen Abständen neu zu starten , nur um sicherzustellen , dass alles richtig aufkommt, um nächtliche Punkte zu einem sehr ernsten Speicherverlust in der Anwendung neu zu starten.
quelle
Es gibt einen Unterschied zwischen "Best Practice", was viele Menschen aus guten Gründen tun, und "Common Practice", was viele Menschen tun, weil sie faul und / oder unwissend sind.
Anwendungen und (schlechtere) Server, die routinemäßig neu gestartet oder neu gestartet werden müssen, um einen reibungslosen Betrieb zu gewährleisten, sind weit verbreitet. Es ist aber auch ein klarer Hinweis darauf, dass Sie einen kritischen Fehler haben.
Indem Sie dafür sorgen, dass eine Anwendung regelmäßig neu gestartet wird, verbirgt Ihr Unternehmen einen schwerwiegenden Fehler unter dem Teppich. Dies ist unentschuldbar. Der Fehler muss behoben werden, sonst kommt er zurück, um Sie später zu beißen.
Idealerweise sollte Ihr Unternehmen einen besseren Entwickler finden. Leider kann dies zu ziemlich viel Arbeit führen, um große Teile Ihres Codes neu zu schreiben. Die Tatsache, dass der Entwickler schlecht geschriebenen Code entweder für akzeptabel hält oder nicht genug weiß, um die Symptome von fehlerhaftem Code zu erkennen, legt nahe, dass die Qualität des Codes niedrig ist. Ein guter Entwickler wird verfassungsmäßig nicht in der Lage sein, ihn in diesem Zustand zu belassen.
Da Sie möglicherweise nicht in der Lage sind, den Entwickler zu ersetzen, einige Vorschläge:
Auch ohne auf entwicklerorientierte Profilerstellungstools zuzugreifen, gibt es zahlreiche sysadmin-orientierte Tools für die Profilerstellung und Überwachung der Speichernutzung in Java-Anwendungen. Sie sollten auf jeden Fall die Überwachung des Arbeitsspeichers (insbesondere des Heapspeichers) auf Ihren Produktionsservern einrichten. Ich würde dies empfehlen, auch wenn Sie Qualitätscode ausgeführt haben. Sie erhalten möglicherweise eine Vorwarnung, wenn Ihre fehlerhaften Apps umkippen.
Besser noch: Sie können anhand dieser Informationen nachweisen, dass ein Leck vorliegt, und möglicherweise sogar angeben, wo sich das Problem in der Anwendung befindet. Dadurch erhalten Sie bessere Munition für die Lobby, damit diese repariert wird.
quelle
Der Anwendungsentwickler behauptet mit größerer Wahrscheinlichkeit, dass es in seinem eigenen Interesse liegt, seinen Arsch zu bedecken, indem er seine unprofessionelle Arbeit erledigt. Vielleicht hat er aufgehört zuzugeben, dass er etwas mit einem unglaublichen Speicherleck geschrieben hat, aber nicht sehr weit davon entfernt.
quelle
Viele Antworten scheinen hier von praktischen Lösungen abzuweichen. Sie scheinen Dogmen zu meiden - Server sollten niemals neu gestartet werden - warum haben wir 5 Neunen? Fehlertoleranz? Nun, das ist so, wenn sie auf sein sollen, bleiben sie auf.
Auch die Ursache für schlechte Entwickler oder schlechte Entwicklungspraktiken zu nennen, geht nicht an die Wurzel des Problems. Es kann aber meistens sein, dass sein Anwendungscode nicht schlecht ist. Diese Probleme sind bereits in einem Großteil des Systemcodes enthalten. Kleine Speicherverluste, Java-Heap und Permgen-Probleme, wenn Sie wie wir viele kleine Apps ausführen. Moderne Server und die Software, die sie ausführen, sind sehr komplex. Wenn Sie überlegen, was ein Server wie Tomcat tun muss - Dateien bereitstellen, Webanforderungen verarbeiten, Netzwerkkommunikation, Datenbankkommunikation usw. - dann ist das eine Menge. In diesem Stapel gibt es eine Menge beweglicher Teile.
Das proaktive Neustarten von Servern, beispielsweise einmal pro Woche oder Monat, ist meiner Ansicht nach intelligent und effizient. Wenn Sie gruppiert sind und die Server rotieren, sollten Sie die Clients nicht ein bisschen beeinflussen. Kunden sind mit der Leistung Ihrer Server viel zufriedener.
quelle
IMO-Server sollten so wenig wie möglich heruntergefahren werden. Es ist wahrscheinlicher, dass der App-Entwickler eine fehlerhafte Anwendung mit einem Speicherverlust erstellt hat.
quelle
Ich habe jeden Abend ein Skript, das einen unserer Webserver neu startet, aber das liegt eher an einer schlecht geschriebenen Java-Anwendung als an einem Industriestandard. Ich würde sagen, dass es nicht ungewöhnlich ist, die Webdienste neu zu starten. Dies kann die gesuchte Speicherbereinigung bewirken und den Server im Vergleich zu einem vollständigen Neustart weniger belasten.
quelle
Ein Server sollte vorzugsweise niemals neu gestartet werden. Das ist einer der Gründe, warum wir Fehlertoleranz haben . Wenn Sie Ihren Server aufgrund Ihrer Anwendungen neu starten müssen, verlieren Ihre Anwendungen Speicher und sind fehlerhaft aufgebaut.
Ich habe bereits mit Tomcat gearbeitet und hatte das gleiche Problem. Wenn ich das nächste Mal mit einem Java-Container arbeite, suche ich nach einem anderen, vielleicht JBoss oder GlassFish.
Bearbeiten: Wenn Sie es jetzt jede Nacht neu starten müssen, müssen Sie es wahrscheinlich häufiger neu starten, wenn / wenn die Last steigt. Stellen Sie sicher, dass Sie solide Anwendungen haben, das ist die beste Lösung.
quelle
Das häufigste, das ich je gesehen habe, ist wöchentlich. Wo ich gerade bin, sind wir ein Windows-Shop und machen das monatlich über das Wochenende nach Patch Tuesday.
quelle
Ich bin damit einverstanden, dass es nicht ideal ist, einen Server ständig neu zu starten, aber es gibt Situationen, in denen weder der Entwickler noch das Falsche schuld sind. Wir haben eine gut erzogene Anwendung, bei der aufgrund von Problemen in der Python Popen-Bibliothek Speicherplatz verloren geht. Es ist eine alte Anwendung, die bald eingestellt wird, aber geschäftskritisch ist. Wir müssen es mit einem Minimum an Aufwand für unsere Kunden am Laufen halten. Deshalb haben wir uns entschieden, den Server jede Nacht neu zu starten.
quelle