我们有一个需要一直运行的 Windows 桌面应用程序(100% 正常运行时间)。它在 Windows Server 2012 上运行,并且运行正常,除了一个严重的问题,当发生该问题时,应用程序继续运行(在任务管理器和资源监视器上可见),但其中的主计时器线程已停止,基本上无法完成其核心工作。只有应用程序 UI 可见。令人惊讶的是,这个异常甚至没有被记录在日志中,日志生成只是停止了。所以日志监控技术在这里不起作用。
我们正在修复此问题,但我们仍想在内部监控/确保桌面应用程序正常运行。我计划使用心跳 URL 来监控它,此桌面应用程序将在每次触发计时器事件时使用该 URL。它会通知监控服务器(心跳 URL 主机)“我还活着”。如果 N 分钟内未收到心跳,则会生成通知。
我的问题是,这是正确的方法吗?是否有现成的付费/免费工具可用于上述目的?
鉴于我们无法使用外部监控服务在内部监控应用程序,因此我想到了这个解决方案。
答案1
这听起来像是你自己开发的东西,如果你已经有一个外部监控服务,添加外部 URL 来发布/获取就可以了,但这听起来像是一个不太好的解决方案。
您还可以在同一台服务器上分离另一个进程并执行类似操作。由于日志生成会停止,如果它在某个时间段内写入日志,则让一个进程监视该日志文件并查看它是否在某个时间段内未被写入。如果尚未写入,则终止该进程并重新启动该程序。
如果您能够分拆另一个线程,而不是另一个进程,那么您可以创建一些共享的 LastTimeCalled 变量。Timer 循环将变量设置为当前时间,另一个进程监视该变量。
但是,根本问题是导致它停止的一些错误,应该修复该错误而不是使用创可贴。