夏令时导致.net app消耗100%cpu

时间:2014-03-31 09:18:56

标签: .net .net-4.0 dst

好的,所以本周末丹麦的夏令时来了。这不过是平安无事的。我们有一个在服务器场上运行的webscraping应用程序。在任何给定的时间点,我们运行此应用程序的2-6000个实例。通常这很好用。

我们会随着时间的推移对这个应用程序进行开发并发布新内容。因此,尽管大多数现有代码库已经多次通过此过程而没有发生任何事故,但其中一些是新的。

当周日时钟发生变化时,我们运行了5.500个实例。其中约有100人决定停止正常做的事情,而是在单个核心上花费100%的cputime直到被终止。

所以我的问题如下: 使用.net4.0框架时,有没有人经历过这样的事情?我知道“只是”在我们自己的代码片段之外寻找答案是无情的。我们正在努力缩小代码破坏的范围。因此,这主要是从两个方向寻找原因。

1 个答案:

答案 0 :(得分:1)

这不太可能是由.NET Framework本身引起的。

这只是一个猜测,但在您的应用程序的某个地方,您可能有一些使用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
}

如果它恰好在恰当的时间发射,那么这个例子可能会在秋天再运行一个小时。我正在努力想到一个常见的情况,即春天多一个小时会进入无限循环。秋季案件更为常见。不过,你应该检查一下。

顺便说一下 - 你当然应该做我上面展示的内容。 the Stopwatch class可以更好地为这两个例子提供服务。

补充阅读:The Case Against DateTime.Now