夏令时导致.net应用程序消耗100%的cpu

夏令时导致.net应用程序消耗100%的cpu,.net,.net-4.0,dst,.net,.net 4.0,Dst,好吧,这个周末丹麦的夏令时来了又去了。这一点也不平静。我们有一个在服务器场上运行的Web垃圾应用程序。在任何给定的时间点,我们都在运行该应用程序的2-6000个实例。通常情况下,这工作相当好 随着时间的推移,我们对这个应用进行了开发,并发布了新的内容。因此,虽然大多数现有的代码库已经多次经历了这个过程,但没有发生意外,其中一些是新的 当时钟在周日改变时,我们运行了5.500个实例。其中约100人决定停止正常工作,而是将100%的CPU使用时间花费在单个内核上,直到终止 因此,我的问题如下: 有没

好吧,这个周末丹麦的夏令时来了又去了。这一点也不平静。我们有一个在服务器场上运行的Web垃圾应用程序。在任何给定的时间点,我们都在运行该应用程序的2-6000个实例。通常情况下,这工作相当好

随着时间的推移,我们对这个应用进行了开发,并发布了新的内容。因此,虽然大多数现有的代码库已经多次经历了这个过程,但没有发生意外,其中一些是新的

当时钟在周日改变时,我们运行了5.500个实例。其中约100人决定停止正常工作,而是将100%的CPU使用时间花费在单个内核上,直到终止

因此,我的问题如下:
有没有人在使用.net4.0框架时遇到过类似的情况?我知道“仅仅”从我们自己的代码堆中寻找答案是无情的。我们正在努力缩小代码被破坏的范围。所以这主要是从两个方向寻找原因。

这不太可能是由.NET框架本身造成的

这只是一个猜测,但在应用程序的某个地方,可能有一些代码使用了
DateTime.Now
。例如:

DateTime then = DateTime.Now;
// ... do some work ...
DateTime now = DateTime.Now;
TimeSpan duration = now - then;
在DST变化期间,产生的持续时间可能在春季额外增加一个小时,或者在秋季最多减少一个小时

这本身不会导致CPU达到100%,但也许您正在做的事情的结果会。我将仔细研究应用程序中涉及计时的任何循环退出条件。例如:

DateTime start = DateTime.Now;
while (DateTime.Now - start < TimeSpan.FromSeconds(60))
{
  // do something
}
DateTime start=DateTime.Now;
while(DateTime.Now-start
如果在正确的时间开火,这个例子可能会在秋天额外运行一个小时。我正在努力思考一种常见的情况,即春季额外的一个小时将进入一个无休止的循环。秋天的情况更为常见。不过,你还是应该检查一下

顺便说一句,你当然不应该做我上面展示的事情。这两个例子都可以用


附加阅读:

这100个实例中是否有一个仍在运行?您可以将调试器附加到进程,暂停该进程,然后查看堆栈跟踪,以尝试找到问题所在。这是一个适当的计划作业,在该作业中,您可以转换GMT/UTC,并由于DST导致无休止的循环而获得一个off。所有实例都已被终止。因为他们扰乱了生产,所以有人经过并彻底杀死了他们。没有调度作业,也没有任何gmt/utc转换。我们以前有一个bug,我们会一直睡到给定的时间,但这导致进程消耗接近0的cpu,而不是100%的cpu