AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Feststellen (vllt. anhand CPU-Auslastung) ob Prozess auf einem anderen Rechner hängt
Thema durchsuchen
Ansicht
Themen-Optionen

Feststellen (vllt. anhand CPU-Auslastung) ob Prozess auf einem anderen Rechner hängt

Ein Thema von Jumpy · begonnen am 29. Apr 2014 · letzter Beitrag vom 29. Apr 2014
Antwort Antwort
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#1

AW: Feststellen (vllt. anhand CPU-Auslastung) ob Prozess auf einem anderen Rechner hä

  Alt 29. Apr 2014, 16:26
Das ist zwar keine Lösung für Dein eigentliches Problem, aber ich sende in solchen Fällen aus dem "Watchdog" heraus eine EMail. In diesen Fällen wird dann weltweit schon irgend jemand reagieren. Fehlalarme gab es bei mir noch nicht. Meine eigenen Dienset schreiben regelmäßíg ein Logfile mit Timestamp, auch wenn sie nichts tun. So läßt sich sehr einfach feststellen ob die sich selber aufhängen.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: Feststellen (vllt. anhand CPU-Auslastung) ob Prozess auf einem anderen Rechner hä

  Alt 29. Apr 2014, 16:41
Das hab ich jetzt auf die schnelle auch so umgesetzt, dass dann eine Email an die Admins geht. Ist in der Regel dann auch OK und wenn das Nachts passiert weiß der erste Admin der zur Arbeit kommt direkt Bescheid.
Trotzdem wär es natürlich cool, wenn mein Dienst den fehlerhaften fremden Diesnt selber killen und neustarten könnte.

Ich habe mich durch ein paar MSDN-Einträge und Artikel von Mark Russinovich bzgl. pskill gearbeitet und bin dabei auf dessen Bruder psList gestossen, der vllt. das kann was ich suche. Werde das mal probieren.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Feststellen (vllt. anhand CPU-Auslastung) ob Prozess auf einem anderen Rechner hä

  Alt 29. Apr 2014, 16:47
Falls Du weitreichende Rechte auf dem Zielrechner hast und etwas Zeit zur Analyse, könntest Du evtl Speicherbereiche des fremden Dienstes auf Unterschiede in Intervallen prüfen, in sich denen bei normalem Ablauf etwas ändert. Oder Du erstellst einen Task, der den Dienst "vorsorglich" regelmäßig über sc.exe neu startet.

EDIT: Diese Unit habe ich mal selber eingesetzt, um ggf. einen Thread auszubremsen. Um den Prozentsatz der Auslastung festzustellen, muss das result von wsGetCpuUsage noch durch die Anzahl der Prozessoren geteilt werden.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all

Geändert von Union (29. Apr 2014 um 17:00 Uhr)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#4

AW: Feststellen (vllt. anhand CPU-Auslastung) ob Prozess auf einem anderen Rechner hä

  Alt 29. Apr 2014, 19:06
Zitat:
In Microsoft Windows XP SP1 and later operating systems, GDI uses a watchdog timer to monitor the time that threads spend executing in the display driver. The watchdog defines a time threshold. If a thread spends more time in a display driver than the threshold specifies, the watchdog tries to recover by switching to VGA graphics mode.
If the attempt fails, the watchdog generates bug check 0xEA, THREAD_STUCK_IN_DEVICE_DRIVER.

Vielleicht lässt sich so etwas Ähnliches auch auf dem Zielrechner einrichten.

Stichwort: IsProcessRunning
http://www.delphipraxis.net/168662-b...tet-wurde.html
#6

http://www.delphipraxis.net/177915-p...uerzt-ist.html
http://www.delphipraxis.net/174350-w...angen-hat.html
http://www.delphipraxis.net/122731-w...mm-haengt.html
http://www.delphipraxis.net/66018-fe...ohren-ist.html

Geändert von hathor (30. Apr 2014 um 08:27 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: Feststellen (vllt. anhand CPU-Auslastung) ob Prozess auf einem anderen Rechner hä

  Alt 29. Apr 2014, 20:04
Vielleicht hilft das hier:
Delphi-Quellcode:
function IsAppRespondigNT(wnd: HWND): Boolean;
type
  TIsHungAppWindow = function(wnd:hWnd): BOOL; stdcall;
var
  hKernel: THandle;
  IsHungAppWindow: TIsHungAppWindow;
begin
  Result := True;
  hKernel := GetModuleHandle('user32.dll');
  if (hKernel > 0) then
  begin
    @IsHungAppWindow := GetProcAddress(hKernel, 'IsHungAppWindow');
    if Assigned(IsHungAppWindow) then
    begin
      Result := not IsHungAppWindow(wnd);
    end;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#6

AW: Feststellen (vllt. anhand CPU-Auslastung) ob Prozess auf einem anderen Rechner hä

  Alt 29. Apr 2014, 20:56
Nur über Telnet wirst du wohl Probleme haben.
Da bleibt dann nur noch ein lokaler Überwachungsdienst.

Unsere ServerApp blieb auch manchmal hängen.
Da hatte ich dann erstmal einen Logging-Thread in der Anwendung erstellt, der Loggt regelmäßig einige Dinge.
- die CPU-Auslastung des eigenen Prozesses
- der eigene Arbeitsspeicher
- - Belegung, Ungenutzt (Defragmentierung) ... aber das das geht im FastMM einfacher auszulesen
- Belegung / Frei des eigenen virtuellen Speichers
- Belegung / Frei realen RAM
- Belegung / Frei / Auslagerungsdatei des eigenen globalen Arbeitsspeichers
- nja, und dann halt noch so paar Dinge, wie Anzahl der DataSnap-Verbindungen, und die Aufruf-Anzahl verschiedener AppsFunktionen

Wird aktuell alle 10 Sekunden gemessen, und dann alle 5 oder 15 Minuten in eine Logdatei gespeichert, mit Min, Max und Durchschnitt (innerhalb des Logintervals)

So hat man zumindestens erstmal einen kleinen Überblick, was eigentlich läuft.

(Der halbwegs kleine Code läuft so aber erst ab D2009, bzw. D2006, mit kleinen Änderungen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: Feststellen (vllt. anhand CPU-Auslastung) ob Prozess auf einem anderen Rechner hä

  Alt 29. Apr 2014, 21:03
Nur über Telnet wirst du wohl Probleme haben.
Es ist mir auch neu, das man per TelNet Prozesse abschießen kann, außer, man hat einen Exploit. Natürlich benötigt man einen entsprechenden Zugriff auf dem Zielrechner.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz