我在 Windows Server 2008 上运行生产 Web 服务器。在此服务器上,我有一个用于记录某些用户操作的数据库,但时不时地,我会莫名其妙地获得数据库条目,根据记录 ID 以及前后紧接着的记录,这些条目记录的时间是错误的(超过 7 天)。例如,记录 ID 1001 代表 12 月 7 日晚上 11 点,1002 代表 12 月 7 日晚上 11 点 01 分,然后 1003 代表 11 月 28 日凌晨 1 点 38 分,然后下一条记录将再次回到正轨。该问题似乎出现在随机记录(或连续 2-3 条记录)中,并且每隔几天出现一次。这绝对令人困惑,因为应用程序中只有一个地方分配这个日期/时间值,那就是系统 UTC 日期。
我一直将系统时间同步到 time-a.nist.gov(我在另一篇文章中读到它比默认的 time.windows.com 更可靠),但似乎偶尔还是会出错(3-4 分钟),但我猜测时间服务器偶尔会出现暂时故障,导致日期在短时间内变为严重错误的值,然后又变回原值。要么是主板时钟电池坏了,时间暂时变化的原因是主板丢失了时间,然后时间同步又将其调回原位。
我的怀疑是否正确?我应该关闭生产服务器的时间同步吗?将日期分配给事件日志,而这些日期比实际日期早最多 2 周,这是一个严重的问题,当我的应用程序的下一个版本发布时,我不能再遇到这样的问题。任何建议或意见都将不胜感激。
答案1
我不确定时间同步是否是导致您出现问题的原因,但除了完全禁用时间同步之外,还有一些很棒的第三方实用程序可以进行时间同步。我个人最喜欢的是塔迪斯 2000。其中一个功能是“最大调整”,您可以将其设置为几分钟(我通常使用 5 分钟)——这限制了一次可以更改的时间量。但在实践中,一旦 Tardis 2000 锁定到时间源,它就会测量系统时钟的变化并通过微调时钟频率使其保持同步!如果它失去同步,它甚至会向您发送电子邮件。非常全面的小型 SNTP 实用程序。
答案2
在系统日志中搜索事件 520(“时钟已更改”事件)。这应该会告诉您是谁/什么以及何时更改了时钟。这至少应该可以帮助您缩小范围。