Ich habe kürzlich eine Reihe von Windows Server 2008 R2 / IIS 7.5-Servern auf neue Server migriert, auf denen Windows Server 2012 / IIS 8 ausgeführt wird.
Ich habe ein merkwürdiges Verhalten von IIS. Wir haben 2 identische Server, jeder Server betreibt 2 Websites, jede in ihrem eigenen App-Pool. Der Code für jede der Websites ist identisch. (Buchstäblich ... gleiche DLLs und alles, nur etwas andere Konfiguration).
Die App-Pools werden alle 24 Stunden nach einem Zeitplan recycelt, aber während dieses 24-Stunden-Zeitraums steigt die CPU-Auslastung des w3wp-Worker-Prozesses in Schritten von 12,5% (der Server verfügt über 8 Prozessoren, daher glaube ich nicht ein Zufall).
Sobald die CPU-Auslastung steigt, wird sie NICHT wieder sinken, bis die App wiederverwendet wird. Soweit ich das beurteilen kann, tut die App derzeit nichts und verarbeitet KEINE Anfragen. Ich kann den gesamten Datenverkehr zum Server blockieren und die CPU-Auslastung bleibt einfach dort. Ich kann die Website sogar neu starten und die CPU-Auslastung bleibt gleich. Die einzige Möglichkeit, die CPU-Auslastung zurückzusetzen, besteht darin, den App-Pool, auf dem er ausgeführt wird, zu recyceln oder neu zu starten.
Ich bin mir ziemlich sicher, dass dieses Problem nichts mit meinem Code zu tun hat, sondern mit einer schlechten IIS-Konfiguration oder einer Änderung in IIS 8, die mit der Hardwarekonfiguration schlecht funktioniert, oder so?
Ich bin mir nicht sicher, ob es wichtig ist oder nicht, aber dies sind Rackspace Performance Cloud-Server.
Hier ist ein Screenshot, der Ihnen die CPU-Auslastung auf diesen Servern über die Zeit zeigt (grüne Pfeile zeigen auf die Zeiten, zu denen der App-Pool recycelt wird. Sie können sehen, dass jedes Plateau ein ganzzahliges Vielfaches von 12,5% ist:
Hat jemand dieses Verhalten beobachtet? Ich habe diese Frage aus dem Jahr 2009 bei jemandem gefunden, der das gleiche Problem mit IIS 6 zu haben scheint:
IIS w3wp mit hoher CPU ohne Datenverkehr
Jede Hilfe wird sehr geschätzt
Sie können versuchen, mit dem Debug-Diagnose-Tool zu ermitteln , was das Problem verursacht. Es dient normalerweise zur Fehlerbehebung bei Abstürzen und Speicherlecks, kann jedoch dazu beitragen, herauszufinden, welche Komponente das Problem verursacht.
quelle
high CPU or RAM more 90%
?Das sieht wirklich so aus, als ob ein Code in einer Endlosschleife steckt.
Eine Anfrage kommt herein, IIS beginnt sie zu bedienen, etwas (wahrscheinlich ein Fehler) löst dieses Verhalten aus, ein Worker-Thread tritt in eine Endlosschleife ein und bindet eine CPU an 100%, und dann bleibt dies nur so, bis der App-Pool recycelt wird.
Auch wenn keine neuen Anforderungen eingehen, bleibt die CPU in Gebrauch, da der feststeckende Thread nie tatsächlich beendet wird.
Manchmal löst eine neue Anforderung dieses Verhalten erneut aus , und dann erhalten Sie zwei feststeckende CPUs (oder drei oder vier ...).
Durch das Recycling des App-Pools werden natürlich alle Worker-Threads beendet, sodass das Problem gelöst wird ... bis es erneut auftritt.
quelle
Sie können einen CPU-Profiler an den w3wp-Prozess anhängen und einen Blick darauf werfen, was dort vor sich geht. Sie sollten sehen können, was die CPU-Zyklen verbraucht.
quelle
Sieht für mich wie eine Endlosschleife aus. Ich habe dies einige Male gesehen, obwohl IIS sagte, dass keine offenen Anfragen vorliegen. Ich bin mir nicht sicher, wie das sein kann, aber genau das würden Sie sehen. Der schwierige Teil ist, dass IIS Anforderungen erst protokolliert, wenn sie abgeschlossen sind. Daher ist es schwierig herauszufinden, welche Anforderung dieses Verhalten auslöst.
quelle