문제

원격 앱이 실패/충돌했는지 여부를 감지하는 방법을 아는 사람이 있습니까? 나는 그것이 사용할 수 없을 때를 의미합니다. 일반적으로 제목 표시 줄에서 "응답하지 않음"을 볼 수 있습니다.이 경우 열쇠는 앱이 여전히 실행되고 있다는 것입니다. 따라서 프로세스가 더 이상 실행되지 않는 것만으로는 충분하지 않습니다.

WMI는 원격 시스템에서 System.diagnostics.process.Rected의 사용을 지원하지 않습니다. 원격 시스템에서 응답하십시오. 그리고 그것들은 이러한 종류의 정보에 대해 Win32_Process에서 쿼리 할 수있는 다른 WMI 속성이없는 것 같습니다.

도움이 되었습니까?

해결책

프로그램의 '라이성'을 결정할 때, 해당 측면이 유용한 방식으로 살아 있다는 것을 정의하는 것이 중요합니다.

몇 가지 간단한 '프록시'접근 방식은 단순성으로 인해 피상적으로 매력적이지만 근본적으로 중요한 측면을 측정하지는 않습니다.

아마도 가장 일반적인 것은 "살아있는 과정"과 "별도의 하트 비트 방송 스레드"일 것입니다. 아마도 그렇게 간단하기 때문일 것입니다.

bool keepSending = true; // set this to false to shut down the thread
var hb = new Thread(() => 
    {
         while (true)
             SendHeartbeatMessage();   
    }).Start();

그러나이 두 가지 모두 심각한 결함이 있습니다. 앱의 실제 작업 스레드가 잠금 (무한 루프 또는 교착 상태로 들어가면)이 계속해서 OK 메시지를 연기하게 보낼 수 있습니다. 프로세스 기반 모니터링의 경우 더 이상 실제 작업을 수행하지 않더라도 프로세스가 계속 '살아남아'를 계속 볼 수 있습니다.
주 스레드의 진행 상황을 테스트하여 여러 가지면에서 스레드를 여러 가지면에서 개선 할 수 있지만 (복잡성과 우연한 스레딩 문제를 크게 증가시킬 수 있음) 잘못된 솔루션을 사용하여 올바른 솔루션을 향해 밀어냅니다.

가장 좋은 점은 Livinges Check의 프로그램 부분에서 수행하는 작업을 수행하는 것입니다. 아마도 모든 서브 작업이 완료된 후 (너무 자주 발생하지 않도록 임계 값으로) 또는 출력을 간단히 살펴보고 입력이 출력을 초래하는지 확인하기 위해 메인 스레드에서 직접 하트 비트를 사용합니다.

내부적으로 (프로그램 내)와 외부 (특히 프로그램의 외부 소비자/사용자가있는 경우)를 모두 검증하는 것이 좋습니다. 웹 서버가있는 경우 : 사용하려고 시도하십시오. 앱이 일부 이벤트 루프 기반 시스템 인 경우 응답 해야하는 이벤트를 트리거하고 출력이 올바른지 확인하십시오). 무엇이든지 항상 확인하고 싶다고 생각합니다. 유용한 그리고 올바른 행동은 전혀 활동이 아닌 행동이 발생합니다.

프로그램의 존재뿐만 아니라 행위 수표가 더 유용 할 수 있습니다. 내부 상태에서 더 많은 시간을 내면 시스템의 더 많은 시스템을 확인합니다. 상자에서 모니터 프로세스를 실행하면 로컬 루프백 만 확인하고 상자를 실행하면 DNS와 같은 잊혀진 측면을 포함하여 훨씬 더 많은 네트워크 스택을 확인할 수 있습니다. .

필연적으로 이것은 일반적인 해결책이 아닌 특정 작업에 대해 본질적으로 생각하기 때문에 점검을 어렵게 만듭니다. 이로부터의 배당금은 많은 경우 에이 접근법이 심각하게 고려되기에 충분한 이점을 얻을 수 있어야합니다.

다른 팁

앱이 충돌했는지 또는 실제로 유용한 일을하고 있는지 알기가 어렵습니다.

이걸 고려하세요:

 while(true);

프로세서는 매우 바쁘다. 그리고 이것이 별도의 스레드에서 수행되면 응답 할 수도 있습니다. 그러나 앱이 더 이상 작동하지 않기 때문에 이것은 원치 않는 동작입니다.

이 문제를 해결하는 가장 좋은 방법은 주기적으로 (소프트웨어의 특정 지점에서) 특정 카운터를 추가하고이를 방송하는 것입니다. Watchdog 앱은 이러한 방송을들을 수 있으며 더 이상 도착하거나 이해가되지 않으면 (카운터가 추가되지 않으면) 프로세스를 죽이고 다시 시작할 수 있습니다.

방송은 여러 가지 방법으로 수행 할 수 있습니다. 가장 쉬운 것은 카운터를 파일에 쓰는 것입니다 (파일이 쓸 때 파일이 잠겨 있는지 확인하여 판독 프로세스가 동시에 읽을 때 반 망가 넣은 파일을 얻지 못하도록합니다).

보다 진보 된 방법은 명명 된 파이프를 사용하거나 소켓을 사용하는 것입니다. UDP 소켓은이 경우 설정 및 사용이 매우 쉽습니다. 로컬 네트워크에서는 거의 일어나지 않기 때문에 'PacketLoss'에 대해 걱정하지 마십시오.

폴링 메커니즘을 사용하고 정기적으로 원격 응용 프로그램의 상태를 요청할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top