Wäre ein Neustart des Servers nach einem Zeitplan eine gute Idee für die Leistung?

14

Ich frage mich, ob ein Neustart eines Servers in einem Zeitplan für die Leistung eine gute Idee wäre.

Angenommen, wir möchten den Server alle zwei Nächte um 02:00 Uhr neu starten.

Der Server hier ist Windows Server 2008 R2. Hauptsächlich laufen SQL Server und IIS 7.5 (fast 15 Apps laufen) unter diesem Server. Server hat 4 GB Speicher.

Tugberk
quelle
9
Haben Sie tatsächlich Leistungsprobleme? Windows kann jahrelang ohne Neustart ausgeführt werden. Es sollte nicht gehen , dass lange ohne einen Neustart, einfach weil Patches installiert werden müssen, aber es ist sicherlich möglich. Ich persönlich habe einen Server in einem völlig isolierten Netzwerk , das für war bis <Schecks> 489 Tage. Es funktioniert immer noch gut und die Leistung ist akzeptabel.
Ben Pilbrow
6
Ich gehe davon aus, dass dies der Fall ist, wenn der Arbeitsspeicher oder die CPU begrenzt sind. - Sie nehmen falsch an.
Rob Moir
4
Die Person, die dieses Posting ablehnt, sollte erklären, warum. Es ist eine gut erklärte Frage und nichts falsch daran.
Tugberk
17
Die richtige Sache zu tun ist , troubleshoot , warum Sie Probleme haben sollte , nicht nur neu starten. Computer, die regelmäßig neu gestartet werden, werden als Desktops bezeichnet.
Bart Silverstrim
4
Sie können abstimmen, weil einige Fragen auch eine schlechte Idee sind; Ein Beispiel fällt mir im Moment allerdings nicht ein. Es gibt viele Gründe. Menschen sind komisch. Wir verlassen uns auf den gesunden Menschenverstand, um die schlechten und schlechten Urteile zu überwinden. Aus diesem Grund ist es eine Community-Q / A-Site.
Bart Silverstrim

Antworten:

32

Obwohl ich der Meinung bin, dass beim Neustarten der Box per se nichts falsch ist, würde ich Ihnen aufgrund Ihres Kommentars, dass der SQL Server-Agent stoppt, eine zusätzliche Analyse der Grundursache empfehlen. Dienste werden in der Regel nicht einfach beendet, und die SQL Server-Agentendienste haben sich nach meiner Erfahrung in der Regel nicht so verhalten.

Abgesehen von einem Neustart sollten Sie die Ereignisprotokolle überprüfen und ein Langzeit-Leistungsindikatorprotokoll erstellen, das Sie mit der Leistungsanalyse von Protokollen (PAL) analysieren können, um festzustellen , ob ein Fehler vorliegt. Sie sollten nicht zuletzt versuchen, die Ereignisse, die mit dem Beenden des SQL-Agenten zusammenhängen, mit anderen Faktoren zu korrelieren.

Evan Anderson
quelle
2
"addt'l" ? Analysefehler in Zeile 2.
Tomas
@tugberk - Wenn dies die Antwort ist, was war die Ursache dafür, dass der SQL-Agent nach Ihrer von Evan vorgeschlagenen Analyse gestoppt wurde?
August
@fluffy: Hey da! Es ist cool dich hier zu sehen! Ich weiß nicht, dass Sie jemals meinen "richtigen Namen" gekannt haben. Ich bin ein alter Bekannter von Song Fight aus den Jahren 2003 - 2005. Denken Sie an beschissenen Synth-Pop und einen "Band" -Namen, der Visionen von Müllhalden hervorruft, an die Sie sich vielleicht erinnern werden.
Evan Anderson
Na das ist doch ziemlich offtopisch! Hallo Einsteller. ;) (Dies sollte natürlich per E-Mail erfolgen, aber ich kann Ihre Adresse nicht finden.)
flauschig
38

Wenn Sie versuchen, den Computer neu zu starten, um die Leistung zu verbessern, bedeutet dies möglicherweise, dass Probleme mit der Speicherverwaltung auftreten.

Caching ist gut

Wenn überhaupt, würde das Neustarten von Servern die Leistung (und natürlich die Betriebszeit) in einer idealeren Umgebung beeinträchtigen . Eine der Grundvoraussetzungen für die Leistung beim Computing besteht darin, die Vorteile des Caching zu nutzen (Daten im schnellen Speicher verfügbar zu haben). Bei jedem Neustart wird der Cache aufgebraucht. Dies gilt sowohl für SQL Server als auch für IIS. Obwohl Sie möglicherweise nicht über die ideale Umgebung verfügen, sollten Sie anhand der folgenden Informationen eine bessere Option finden, als den Server nach einem Zeitplan neu zu starten.

IIS-Speicherlecks?

Nun haben Sie erwähnt, dass dies IIS 7.5 ist. Obwohl ich es bedrückend finde, weisen so viele Web-Apps, die auf IIS 7.5 ausgeführt werden, Speicherverluste auf, dass die Standardeinstellung in IIS darin besteht, die APP alle X Minuten neu zu starten und sie herunterzufahren, wenn ein APP-Pool inaktiv ist. Das Ideal ist, die Speicherverluste zu beheben. Wenn dies nicht möglich ist, können Sie diese Einstellungen anpassen , einschließlich Speicherbeschränkungen und Timer. Sie können perfmon verwenden, um herauszufinden, welcher w3wp-Prozess den Speicher verwendet. Es ist ein bisschen schmerzhaft, aber Sie können es mit dem App-Pool zurückbinden %systemroot%\system32\inetsrv\APPCMD list wps.

SQL-Speicher

Zurück zum Zwischenspeichern nimmt SQL den verfügbaren Speicherplatz in Anspruch. Sie können dies in den Eigenschaften für SQL Server einschränken. Wenn Sie den Speicher nicht einschränken und auch IIS auf der Box ausführen, kann dies zu einem Kampf um die Leistung führen, bei der der Speicher zerstört wird. In diesem ausgezeichneten Artikel wird ausführlich darauf eingegangen : Ein Sysadmin-Handbuch zum Microsoft SQL-Speicher .

Balance

Da sich sowohl IIS als auch SQL auf demselben Computer befinden, müssen Sie die Speichernutzung ausgleichen. Wenn Sie dies nicht tun, erhalten Sie möglicherweise Speicher, der wahrscheinlich erneut auf die Festplatte ausgelagert wird. Dies ist ein schrecklicher Ort (es sollten Leistungsindikatoren für die Auslagerungsaktivität vorhanden sein). Mithilfe der Einstellungen für IIS-Recycling und der SQL-Speicherbeschränkungen sollten Sie in der Lage sein, dieses System stabil zu machen. Um dies auszugleichen, benötigen Sie möglicherweise mehr Speicher als 4 GB. Wenn dies eine Option ist, würde ich dringend empfehlen, SQL Server auf einem dedizierten Computer zu installieren. Dadurch wird die Leistung erheblich verbessert und die Dinge erheblich vereinfacht.

Kyle Brandt
quelle
Erstaunliche Antwort Kyle, ich wünschte, ich hätte vor einigen Monaten eine dieser Fragen zu meiner SBS2011-Leistung! Haben Sie jedes der Dinge, die Sie erwähnen, durch meine eigene (viele Monate dauernde) Forschung getroffen. Immer noch Probleme, aber das ist eine andere Sache.
HaydnWVN
12

Ich bin kein Befürworter eines geplanten Neustarts von Servern, insbesondere nicht, um ein zugrunde liegendes Problem zu lösen. Wenn Sie diesen Server neu starten müssen, um ein Leistungsproblem zu beheben, sollten Sie die Ursache des Problems ermitteln und beheben. Durch einen regelmäßigen Neustart des Servers wird nur das zugrunde liegende Problem verschleiert.

Joeqwerty
quelle
5

Wenn Sie erhebliche Speicherverluste haben, warum nicht? Andernfalls sollten Sie den Computer monatlich mit Updates neu starten.

Chopper3
quelle
Danke für den Tipp. Ich schaue jetzt auf den Task-Manager und sehe, dass das System 75% des Speichers verwendet.
Tugberk
6
Wenn SQL Server ausgeführt wird, ist dies zu erwarten. SQL Server wird versuchen (und Sie sollten es zulassen), den gesamten verfügbaren Speicher zu verwenden.
Ben Pilbrow
4
Das bedeutet nicht, dass Sie Speicherlecks haben. Der Speicher ist da, um verwendet zu werden. Ein Neustart zur Behebung von Speicherlecks ist eine durchaus pragmatische Problemumgehung. Längerfristig ist es jedoch besser, den Fehler zu finden und zu beheben.
Rob Moir
1
@tugberk: Wie ich in meiner Antwort angegeben habe, war es nicht meine Erfahrung, dass der SQL Server-Agent-Dienst aufgrund von Speicherdruckbedingungen beendet wird. Vermutlich gibt es Bedingungen, unter denen dies der Fall sein könnte, aber ich würde davon ausgehen, dass Sie zu diesem Zeitpunkt Probleme mit anderen Diensten haben werden (da dies wahrscheinlich ziemlich schwerwiegend wäre).
Evan Anderson
2
Wenn es eine Erinnerung wäre, müsste man sehen, dass der Swap hart getroffen wird, bevor er nur "stirbt", würde ich denken. Der Speicher wird immer so weit wie möglich für das Zwischenspeichern und dergleichen verwendet. Sie sollten wahrscheinlich zuerst Tools zum Analysieren Ihrer Datenbanknutzung verwenden. Und wenn Sie 15 Apps ausführen und wenig Arbeitsspeicher haben (15 Apps + Datenbank in 4 Gigabyte? Wie groß sind diese Dinge?), Sollten Sie wahrscheinlich bereits die Datenbankkomponente vom Webserver auf einen dedizierten Server aufteilen.
Bart Silverstrim
2

Wenn Sie den Server wirklich nach einem Zeitplan neu starten möchten (aufgrund der oben genannten Speicherverluste oder -aktualisierungen oder aus einem anderen Grund), sollten Sie sich eine Clusterlösung ansehen. Stellen Sie einen anderen Server parallel auf, schließen Sie ihn an einen Load Balancer an (selbst ein einfacher würde dies tun), und Sie können ihn so oft neu starten, wie Sie möchten, ohne die Betriebszeit des Dienstes zu verlieren oder zu befürchten, dass der Server überhaupt nicht startet Du wirst raus sein.

V. Romanov
quelle
1

Es ist keine schreckliche Idee, aber wenn es nur "Voodoo" ist, wird es Ihnen wahrscheinlich nicht viel helfen.

Es gibt jedoch zwei Gründe, die dafür sprechen, dass dies nicht das Ende Ihrer Untersuchung zur Verbesserung Ihrer Leistung ist.

Eines ist die zukünftige Skalierbarkeit. Wenn Ihre Ausfälle das Ergebnis von Auslastung, einer bestimmten Anzahl von Abfragen, einer bestimmten Abfrage, die auf einen Caching-, Abfragekompilierungs- oder Btree-Indexierungsfehler trifft, oder anderen Problemen sind, die derzeit täglich auftreten, treten sie wahrscheinlich häufiger als Auslastung auf nimmt mit der Zeit zu. Nipp das in der Knospe.

Das andere Problem ist, dass Sie vermutlich eingehende Anforderungen von abhängigen Diensten während Ihres Neustarts stoppen müssen. Sie haben gerade eine betriebsbereite Trittfrequenz erstellt. Jedes Mal, wenn eine tägliche Aufgabe ausgeführt werden muss, ist sie an Ihren Neustart gebunden. Irgendwann werden Sie diese massiven Neustarts haben, die sechs Stunden dauern (ich übertreibe hier nicht, ich habe es bei mehr als einer Firma gesehen) und niemand wird sich daran erinnern, warum in der Mitte alles gestoppt und neu gestartet werden muss der Nacht.

Meine Empfehlung wäre, den SQL-Prozess zu überwachen und nach Bedarf neu zu starten. Wie in einem früheren Poster erwähnt, hat SQL nicht das Gedächtnisleck, das die Leute glauben (und ich sage dies als Person, die Mitte der 90er Jahre im MSSQL-Team war). Sie möchten, dass Ihr Datenbankserver fast 100% Arbeitsspeicher und CPU nutzt. Alles andere verschwendet Ressourcen.

Art Taylor
quelle
0

Wenn Sie schlecht geschriebenen Code und Speicherlecks haben, ist ein Neustart möglicherweise die einzige Möglichkeit, den zugewiesenen Speicher wieder in den Pool zurückzuführen. Wenn Sie speichergebundene Prozesse haben, kann diese Aktualisierung des Pools auf einen sauberen Zustand die Leistung für eine Weile verbessern. Aber dies ist wirklich ein schlechter Weg, um mit Leistungsproblemen umzugehen. Die eigentliche Ursache sollte ausgemerzt und behoben werden.

Andernfalls lassen Sie es laufen, bis Sie ein Wartungsfenster zum Anwenden von Patches / Anwendungen / Wiederherstellen von Daten benötigen. Dies könnte ein guter Zeitpunkt sein, um einem Leistungstechniker vorzuschlagen, sich die fraglichen Server genau anzusehen, warum / welche Probleme dies zwingen.

James Pulley
quelle
0

Während keine vollständige Antwort per se , aber ist es eine praktikable Option, dem Server etwas mehr RAM hinzuzufügen? 4 GB sind für einen IIS / SQL Server-Computer ein bisschen zu niedrig. Je nachdem, ob es sich um eine dedizierte Servereinheit oder einen Desktop handelt, der in Betrieb genommen wurde, können Sie 8 GB oder mehr für relativ niedrige Kosten erwerben. Zugegeben, wenn es sich um einen Server handelt, kostet dieser möglicherweise etwas mehr als normales Desktop-RAM, aber zwischen erzwungenen Neustarts bleibt etwas mehr Zeit.

Prüfen Sie, ob Sie SQL Server auf die Verwendung von maximal 80% des Arbeitsspeichers beschränken können, oder überprüfen Sie die Protokolle, um genau zu ermitteln, was falsch läuft und / oder warum der Dienst beendet wird.

tombull89
quelle
0

Unabhängig von dem SQL-Problem, mit dem Sie möglicherweise zu tun haben, wenn Sie Windows-Server haben und eine Patch-Routine ausführen, werden Sie die Server regelmäßig neu starten, ohne "nur weil" neu starten zu müssen. Als ich für "BIG MULTINATIONAL" gearbeitet habe, mussten wir monatlich patchen. Daher wurden alle unsere Server mindestens einmal monatlich neu gestartet.

Mitch
quelle
0

Ich mache das auf 3 Servern, 1 ist unser und 2 Kunden. Ich habe es aus verschiedenen Gründen geregelt - auf einem Server 2008R1 stehen viele Aktualisierungen zur Installation an, aber ich kann sie nicht im Batch installieren, daher installiere ich sie jeden Tag einzeln. ein anderer Server 2012R2 - für die Fehlerbehebung beim Booten und einige Leistungsprobleme usw. Ich halte es nicht für eine schlechte Praxis, einen regelmäßigen Neustart von der anderen Festplatte aus zu planen. Es kann dabei helfen, verschiedene Hardware- und Softwareprobleme zu verfolgen, insbesondere solche, die am automatischen Start beteiligt sind .

integratorIT
quelle
-2

Ich kenne eine große Firma, die nicht nur ihre Windows-Server jede Nacht neu startet, sondern einige sogar alle 24 Stunden neu installiert. Für sie ist es aufgrund von Speicherproblemen in der Software und Sicherheitsproblemen notwendig.

Scheint, dass einige Unternehmen alle 24 Stunden neu starten - obwohl es mir als Linux-Administrator seltsam vorkommt. Um es klar zu machen: Ich würde niemals empfehlen, dies wegen eines Speicherproblems zu tun - spüren Sie das Problem auf und lösen Sie es.

Wenn Ihre Speichernutzung monatelang bei 75% bleibt, ist möglicherweise kein Neustart erforderlich - es ist völlig normal, dass eine Serveranwendung den gesamten verfügbaren Speicher verwendet -, was die Leistung erheblich steigert, da Sie weniger Festplatten-E / A benötigen, wenn Sie sie verwenden der RAM, um Ihre Daten zwischenzuspeichern.

Subito
quelle
danke @Subito. Nun, ich bin eigentlich ein Web-Entwickler (kein Server-Administrator), aber momentan muss ich einen Server warten. Deshalb stelle ich diese einfachen Fragen. Ich glaube, Du hast recht. Aber ich bin schockiert, dass dort Unternehmen solche Dinge tun. Profitieren sie nicht von einer Art serverseitigem Cashing?
Tugberk
Alle Anwendungen sind selbst geschrieben und für die Verwendung mit DOS oder 3.11 vorgesehen. Sie haben es geschafft, eine Datenbank über diese Anwendungen hinaus zu erhalten und sie irgendwie auf Server 2008 zu portieren. Es ist ein Wunder, dass dies immer noch funktioniert. Niemand würde die Nüsse haben und versuchen, alles zu ändern, um Caches zu verwenden. Sie haben ein paar Leute, die dort sitzen und auf einen Absturz warten und dann die Anwendung / den Server / was auch immer neu starten.
Subito
6
Nein, es ist nicht "legitim", einen Server alle 24 Stunden neu zu starten. Entweder sie haben einige bekam sehr extreme Rand Fall Emission oder deren Netzwerk und die Server werden von den größten Idioten in den Beruf geführt.
Rob Moir
ja, sie sind in der Tat die größten Idioten - aber es ist nicht die einzige Firma, die ich kenne, die das mit ihren Windows-Servern macht ... Es scheint eine ziemlich übliche Art zu sein, mit Speicherproblemen umzugehen. - Verstehen Sie mich nicht falsch, ich halte es für einen schrecklichen, schrecklichen Fehler, die Probleme nicht zu untersuchen und zu lösen!
Subito
7
@Subito - In deiner Antwort sagst du "Scheint legitim, alle 24 Stunden neu zu starten". Das ist einfach ein schlechter Rat. Sie sagen dem OP, dass es eine legitime Idee ist, während Sie auf ein Unternehmen verweisen, von dem Sie sagen, dass es voller Idioten mit schrecklicher Software ist. Scheint mir nicht legitim.
MDMarra