我正在为公司开发一款状态监控程序,我们需要知道远程机器上的进程是否因未响应而挂起(这个我可以做到),或者是否抛出了未处理的异常。我尝试过很多方法,从检查进程的CPU使用率到检查进程是否处于空闲状态,但都没有真正可靠的结果。有没有什么办法可以解决这个问题?所有我们要监视的程序都在 .NET 3.5 或 4.0 上运行。
如果您可以控制这些应用程序的源代码,那么答案将会更容易。
我们处理这种情况的方式是,被监视的应用程序定期将其状态写入中央数据库。监视应用程序定期检查这些表中的状态,如果状态在特定时间段(例如2分钟)内没有更新,则会生成警报。
这有助于我们不仅识别应用程序问题,还可以识别连接问题和意外的机器重启。
检查事件日志(系统/安全)能帮助您确定正在监视的进程作为事件源吗?
谢谢大家的回答,我已经找到了一个不错的解决方案:
经过一些研究,我发现.NET程序在启动时会运行4个线程。我在这里监视的所有程序都没有打开任何新线程。经过一些测试,我还发现异常消息会在新线程上打开,并导致程序的CPU使用率降至0。因此,我正在检查这两种情况:
if CPU = 0 and threadCount > 4
很有可能是抛出了异常。否则,程序为什么会停在0个CPU和4个以上的线程上呢?就目前而言,我没有看到其他原因。