Svchost auf 2k8 R1 TS saugt sich voll
Hallo zusammen,
habe folgendes Problem:
die svchost.exe saugt extrem viel RAM. Sie startet bei 500K ist aber nach 3-4 Tagen bei 5Mio KB.
Um wieder auf meine 16-17 GB Auslastung zu kommen hilf meistens nur ein Neustart. Ansonsten läuft das System gnadenlos auf 23,5 / 24 GB hoch.
Das Internetexplorer Workaround habe ich schon durchgeführt - ohne Erfolg. Virenbefall o.Ä. würde ich auch ausschließen, da die PID auf Windowsservices verweißt und mein Virenscanner auch nichts findet.
Services unter der selben PID sind folgende:
Hätte jemand eine Idee was zu tun ist um den Fehler zu finden, bzw. hatte selbst schon mal ein ähnliches Problem?
Eventlogt sagen im Übrigen auch nichts verdächtiges - nur ein paar Errors die durch BackupExec auftreten - ist aber schon länger so.
habe folgendes Problem:
die svchost.exe saugt extrem viel RAM. Sie startet bei 500K ist aber nach 3-4 Tagen bei 5Mio KB.
Um wieder auf meine 16-17 GB Auslastung zu kommen hilf meistens nur ein Neustart. Ansonsten läuft das System gnadenlos auf 23,5 / 24 GB hoch.
Das Internetexplorer Workaround habe ich schon durchgeführt - ohne Erfolg. Virenbefall o.Ä. würde ich auch ausschließen, da die PID auf Windowsservices verweißt und mein Virenscanner auch nichts findet.
Services unter der selben PID sind folgende:
- EventSystem
- fdPHost
- FontCache
- netprofm
- nsi
- W32Time
- WinHttpAutoProxySvc
Hätte jemand eine Idee was zu tun ist um den Fehler zu finden, bzw. hatte selbst schon mal ein ähnliches Problem?
Eventlogt sagen im Übrigen auch nichts verdächtiges - nur ein paar Errors die durch BackupExec auftreten - ist aber schon länger so.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 341072
Url: https://administrator.de/forum/svchost-auf-2k8-r1-ts-saugt-sich-voll-341072.html
Ausgedruckt am: 23.12.2024 um 18:12 Uhr
11 Kommentare
Neuester Kommentar
Moin,
ich meine mich entsinnen zu können, dass es mal hieß, aus Performancegründen einen TS einmal täglich automatisiert zu rebooten.
Ich weiß aber gerade nicht, ob das eine MS- oder Citrix-Empfehlung gewesen ist.
Spricht etwas gegen das Durchführen einer nächtlichen Reboots?
Wir machen es jedenfalls.
Unser Server werden des Nachts einmal alles neu gestartet (zeitversetzt)
Gruß
em-pie
ich meine mich entsinnen zu können, dass es mal hieß, aus Performancegründen einen TS einmal täglich automatisiert zu rebooten.
Ich weiß aber gerade nicht, ob das eine MS- oder Citrix-Empfehlung gewesen ist.
Spricht etwas gegen das Durchführen einer nächtlichen Reboots?
Wir machen es jedenfalls.
Unser Server werden des Nachts einmal alles neu gestartet (zeitversetzt)
Gruß
em-pie
gibt ja viele Wege...
Citrix (XenApp 6.5) brinmgt da Features mit. Dort kann man Einstellen "starte um 03:00Uhr +- 60 Minuten" und alle TS', die in dieser Gruppe sind, starten dann nach einen Zufallsprinzip irgendwas zwischen 02 und 04 Uhr neu.
Das nutze ich aber nicht; hatte damals nicht sooo sauber funktioniert und hatte keine Zeit, daran rumzuforschen
Aktuell/ seit Jahren habe ich einfach eine batch via Taskplaner am Laufen:
das auf allen 5 TS und (manuell) im Taskplaner hinterlegt.
TS1 rebootet um 01 Uhr
TS2 rebootet um 02 Uhr
...
TS5 rebootet um 05 Uhr
User, die dann noch angemeldet sind, werden schlimmstenfalls nicht sauber abgemeldet. Hatte aber in 6 Jahren nur 2x ein Problem damit...
€dit:
man könnte sicherlich noch das Script erweitern, welches zuvor die angemeldeten User ermittelt und dann abmeldet, bevor der reboot läuft. Alles aber eine Kosten/ Nutzen (und ggf. Beqemlichkeits-) Geschichte
Citrix (XenApp 6.5) brinmgt da Features mit. Dort kann man Einstellen "starte um 03:00Uhr +- 60 Minuten" und alle TS', die in dieser Gruppe sind, starten dann nach einen Zufallsprinzip irgendwas zwischen 02 und 04 Uhr neu.
Das nutze ich aber nicht; hatte damals nicht sooo sauber funktioniert und hatte keine Zeit, daran rumzuforschen
Aktuell/ seit Jahren habe ich einfach eine batch via Taskplaner am Laufen:
shutdown -r -f -t 60
das auf allen 5 TS und (manuell) im Taskplaner hinterlegt.
TS1 rebootet um 01 Uhr
TS2 rebootet um 02 Uhr
...
TS5 rebootet um 05 Uhr
User, die dann noch angemeldet sind, werden schlimmstenfalls nicht sauber abgemeldet. Hatte aber in 6 Jahren nur 2x ein Problem damit...
€dit:
man könnte sicherlich noch das Script erweitern, welches zuvor die angemeldeten User ermittelt und dann abmeldet, bevor der reboot läuft. Alles aber eine Kosten/ Nutzen (und ggf. Beqemlichkeits-) Geschichte
'------ Excel Prozess beenden ------
'prg = "Excel.exe"
'set wmi = getobject("winmgmts:")
'sQuery = "select * from win32_process " &_
' "where name='" & prg & "'"
'set processes = wmi.execquery(sQuery)
'for each process in processes
' process.terminate
'next
'-----------------------------------
strComputer = "." 'Dieser Computer
maxUptime = 240 'max Laufzeit des Computers seit letztem Neustart in Stunden!! Bei erreichen dieses Wertes erfolgt Neustart
'~ Abrufen der letzten Boot-Time aus WMI
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOS in colOperatingSystems
dtmBootup = objOS.LastBootUpTime 'Originalwert LASTBOOTUPTIME aus WMI
dtmLastBootupTime = WMIDateStringToDate(dtmBootup) 'Aufruf der Funktion WMIDateStringtoDate; konvertiert in echtes Datum
dtmSystemUptime = DateDiff("h", dtmLastBootUpTime, Now) 'DateDiff "h" liefert Zeitunterschied in Stunden zwischen HEUTE und LASTBOOTUPTIME
'~ Überprüfung: Laufzeit des Computers größer als eingestellte max. Zeit?
If dtmSystemUptime > maxUptime Then
Set objWMIService2 = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}!\\" & _
strComputer & "\root\cimv2") 'JA: Dann verbinden mit WMI
Set colOS2 = objWMIService2.ExecQuery("Select * from Win32_OperatingSystem") 'Objekt setzen auf laufende OS_Instanzen
For Each objOS2 in colOS2 'Für alle laufenden (gefundenen) Instanzen:
objOS2.Reboot() 'Methode Reboot ausführen.
Next
else
'~ Wscript.Echo dtmSystemUptime
'~WScript.Echo "Kein Neustart erforderlich"
'~Wscript.Echo dtmSystemUptime
'~WScript.Echo maxUptime
End If
Next
'~ Funktion Umwandlung des Datumstrings aus WMI in ein lesbares formatiertes Datum.
Function WMIDateStringToDate(dtmBootup)
WMIDateStringToDate = CDate(Mid(dtmBootup, 5, 2) & "/" & _
Mid(dtmBootup, 7, 2) & "/" & Left(dtmBootup, 4) _
& " " & Mid (dtmBootup, 9, 2) & ":" & _
Mid(dtmBootup, 11, 2) & ":" & Mid(dtmBootup,13, 2))
End Function
'~ set objWMIDateTime = CreateObject("WbemScripting.SWbemDateTime")
'~ set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
'~ set colOS = objWMI.InstancesOf("Win32_OperatingSystem")
'~ for each objOS in colOS
'~ objWMIDateTime.Value = objOS.LastBootUpTime
'~ Wscript.Echo "Last Boot Up Time: " & objWMIDateTime.GetVarDate & vbcrlf & _
'~ "System Up Time: " & TimeSpan(objWMIDateTime.GetVarDate,Now) & _
'~ " (hh:mm:ss)"
'~ next
'~ Function TimeSpan(dt1, dt2)
'~ ' Function to display the difference between
'~ ' 2 dates in hh:mm:ss format
'~ If (isDate(dt1) And IsDate(dt2)) = false Then
'~ TimeSpan = "00:00:00"
'~ Exit Function
'~ End If
'~ seconds = Abs(DateDiff("S", dt1, dt2))
'~ minutes = seconds \ 60
'~ hours = minutes \ 60
'~ minutes = minutes mod 60
'~ seconds = seconds mod 60
'~ if len(hours) = 1 then hours = "0" & hours
'~ TimeSpan = hours & ":" & _
'~ RIGHT("00" & minutes, 2) & ":" & _
'~ RIGHT("00" & seconds, 2)
'~ End Function
Falls Du in VBScript etwas haben wolltest.
Zu Deiner anderen Frage:
Wenn ein Windowsdienst sich aufbläht oder am liebsten alle CPU-zeit auffressen will, dann hast Du Kapazitätsdruck in RAM und/oder Rechenleistung. Da staut sich manches an.
Gerngeschehen. War keine. Ich habe nur in meiner KB gekramt. Dieses Script stellt bei mir sicher, dass egal wann der Taskplaner beliebt es zu starten, eine gewisse Zeit zwischen jetzt und dem letzten Neustart vertsrichen sein muss.
Ich hatte es schon öfters, dass der TP mal hängen blieb und Scripte dann hinterher geschossen hat.
Aus Fehlern lernt man.
CPU schreit so laut es geht "LANGWEILIG" während der Arbeitspeicher 4 Tage auch 50 % ruht und dann über 1-2 Tage auf 99% hochfliegt. Und dass nur wegen der svchost. Ich lass den Server jetzt einfach täglich neu starten. Mal schauen was passiert.
Ja mach mal. Ich würde vielleicht auch noch in ruhigen Stunden ein "sfc /scannow" empfehlen.
Vielleicht liegt es an verbosselten Systemdateien. Oder aber Windows ist eben nicht Linux!.
Zitat von @Yannosch:
@beidermachtvongreyscull : Läuft dieses Script zuverlässig auf einem TS bei dir?
@beidermachtvongreyscull : Läuft dieses Script zuverlässig auf einem TS bei dir?
Ich hatte bisher keinerlei Probleme feststellen können. Es läuft bei mir im Kontext NT-System.
VBS ist zwar schon ein Opi aber es liegt mir einfach mehr als Powershell. Die ist nicht mein Ding.
Würde das Script dann gerne einmal testen...
Lässt du das Script dann trotzdem über den Task-Planer starten?
Gut zu wissen wäre dann noch dass auf meinem TS - Server unser ERP + Backup Exec läuft - sollte ja keine Schwierigkeiten geben dann denke ich.
Der Shutdown geht ja vom Kernel aus. Die Dienste werden normalerweise benachrichtigt.
Aber es ließen sich auch entsprechende Abschnitte im Code einfügen, so dass entsprechende Dienste vorher herunterfahren.
Ich wüsste jetzt nur nicht, ob es eine Möglichkeit gibt, von außen festzustellen ob BackupExec Jobs gerade laufen oder in Wartestellung sind.
Obwohl...
BackupExec erlaubt das Ausführen eines Scripts zu Beginn eines Jobs und am Ende.
Wenn Du nen Einzeiler definierst, der als Startscript eine bestimmte Datei irgendwo anlegt und als Endscript diese Datei wieder entfernt, brauchst Du nur den Code um eine "Datei existiert"-Prüfung zu erweitern und das wäre es.
Viele Grüße,
bdmvg
liebe Grüße & schonmal ein schönes Wochenende
Gruß
Yannosch