检查程序是否抛出了异常

3

我正在为公司开发一款状态监控程序,我们需要知道远程机器上的进程是否因未响应而挂起(这个我可以做到),或者是否抛出了未处理的异常。我尝试过很多方法,从检查进程的CPU使用率到检查进程是否处于空闲状态,但都没有真正可靠的结果。有没有什么办法可以解决这个问题?所有我们要监视的程序都在 .NET 3.5 或 4.0 上运行。

4个回答

1

如果您可以控制这些应用程序的源代码,那么答案将会更容易。

我们处理这种情况的方式是,被监视的应用程序定期将其状态写入中央数据库。监视应用程序定期检查这些表中的状态,如果状态在特定时间段(例如2分钟)内没有更新,则会生成警报。

这有助于我们不仅识别应用程序问题,还可以识别连接问题和意外的机器重启。


这可能是最简单的方法... 我得问问我的老板关于实施这个。 - MGZero

1

检查事件日志(系统/安全)能帮助您确定正在监视的进程作为事件源吗?


1

如果没有人点击未处理异常消息上的退出按钮会发生什么?它是否仍然会被记录?这个监视器的想法是在没有人看守时,知道某些处理程序已经崩溃了。 - MGZero
啊,你说的是从交互会话中运行的应用程序。我不确定事件日志条目是在此之后还是之前完成的(我猜测是之后)。我不知道除了修改其他应用程序的代码之外还能做什么。 - iamkrillin
我已经想出了一个解决方案,我会在回答中发布它。 - MGZero

1

谢谢大家的回答,我已经找到了一个不错的解决方案:

经过一些研究,我发现.NET程序在启动时会运行4个线程。我在这里监视的所有程序都没有打开任何新线程。经过一些测试,我还发现异常消息会在新线程上打开,并导致程序的CPU使用率降至0。因此,我正在检查这两种情况:

if CPU = 0 and threadCount > 4

很有可能是抛出了异常。否则,程序为什么会停在0个CPU和4个以上的线程上呢?就目前而言,我没有看到其他原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接