同时在多台机器上执行服务

时间:2013-03-18 10:51:12

标签: c# multithreading service

我正在为远程监控应用程序创建一个项目,该项目由要在各台计算机上托管的服务组成。该服务的工作是使用WMI收集有关CPU使用率,内存使用量等的信息。该服务使用线程每15秒执行一次扫描。现在我希望每台机器上的服务在同一时间执行。例如。 8.15,8.30,8.45。我编写了一个简单的logix来检查当前的第二个计数,并让线程在时间系统中休眠到达正好落在x.15,x.30,x.45等的时间。 但实现这一点本身并不能保证服务通过WMI为同一进程收集的值同时存在。例如。机器1的CPU使用率和机器2的CPU使用率应该同时收集,以便在运行时进行比较。其他流程和指标值也是如此。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

你对“完全相同的时间”的宽容是什么?一秒钟之内? 10毫秒?

如果您的系统位于同一局域网并且网络延迟较小,则可以使用ZeroMQ设置TCP / IP发布 - 订阅系统,每15秒触发一次脉冲,导致所有系统都采用快照。

如果系统分布广泛,那么您可以使用类似的东西来查询NTP服务器: How to Query an NTP Server using C#?

答案 1 :(得分:0)

感谢您的帮助,实际上我得到了这个工作。这里应用的逻辑(由我的妻子建议)。我有一个静态集合,每个运行2-3个不同的线程,使用WMI查询从机器检索不同的值集。现在,这个数据集每1秒(此刻)发生并插入到静态集合中。现在还有另一个线程从集合中获取记录,这些记录的秒数是15的倍数。例如。第二个%15 = 0.现在这解决了这个问题。从集合中收集记录后,我删除了当前时间之前收集的集合中的所有记录。我不确定这是否是最好的解决方案,但为我工作。