我正在为我的公司制定状态监控程序,我们需要能够知道远程计算机上的进程是否由于没有响应而挂起(我可以做)或者是否抛出了未处理的异常。我已经尝试了很多东西,从检查进程的CPU使用情况到检查进程是否已经空闲。没有什么是真正可靠的。反正有没有这样做?我们将监视的所有程序都在.NET 3.5或4.0上运行。
答案 0 :(得分:1)
如果您可以控制这些应用程序的来源,答案会更容易。
我们处理此方案的方式是要定期监视的应用程序将其状态写入中央数据库。监控应用程序然后定期检查这些表中的状态,如果状态未在特定时间段(即2分钟)内更新,则会生成警报。
这不仅可以帮助我们识别应用程序问题,还可以识别连接问题和意外的机器重启。
答案 1 :(得分:1)
检查事件日志(系统/安全性)会帮助您将事件源作为您正在监控的进程吗?
答案 2 :(得分:1)
您可以尝试监视正在运行该进程的系统上的事件日志。当进程抛出并且无异常时,将在此处创建一个条目,其中包含该进程以及有关错误的一些详细信息。
堆栈中还有一些其他问题可以解决同样的问题。
catch another process unhandled exception
How to catch exceptions from processes in C#
答案 3 :(得分:1)
感谢你们的回答,我有一个体面的工作来满足我的需求:
经过研究,我发现.NET程序在启动时运行4个线程。我在这里监控的所有程序都没有打开任何新线程。我还经过一些测试后发现,在新线程上打开了异常消息并导致程序的CPU使用率降至0.因此,我正在检查这两个条件:
if CPU = 0 and threadCount > 4
机会是,抛出异常。因为为什么程序会坐在那里有0个CPU和超过4个线程?就我现在所见,没有任何其他原因。