"Microsoft Windows Kernel general"Event id:1导致Bad Request错误

2012-12-14  籽藤 

"Microsoft Windows Kernel general"Event id:1 这个Windows Event Log,出现在系统时间被调整之后。

服务器系统是Windows Server 2008 R2,这也是目前项目在Windows Azure上Cloud Service部署的环境。

错误现象

有一批测试用例,每天会自动运行,访问Auzre上的Service。但偶尔会出现400 bad Request error。重新运行单个/所有测试用例,都难以复现错误。出错的测试用例,既不是第一个,也不是最后一个,每次报错的测试用例都不一样。

分析

既然报错的测试用例没有规律可循,说明问题不是出在测试代码上。必须要查看Server端的Event Log,了解在测试运行的过程中,环境发生了什么变化。在下图的Log中看到,系统调整时间和发送请求的Event(即:Event id:30000 2012/12/04 03:58:18)几乎是同时进行的。



这个错误只出现过两次,我把两次出错的Event log与100% Pass的Log进行比较,认为"Microsoft Windows Kernel general"Event是个很大的疑点。于是,写了一个脚本(参见 /blog/7477),在发送请求的过程中,每隔一秒钟去调整服务端的系统时间,果然复现了Bad Request错误。



我把这些发现告诉开发,得知:Service的客户端(Test Machine)会产生一个Token,并在服务端(Azure Instance VM)校验。如果Token过期的话,就会导致请求失败,Test Failed。

随后,我去看"Microsoft Windows Kernel general"Event中New Time和Old Time的值。服务器端的时间果然是往回调了。 

第一次出错:

NewTime 2012-12-04T11:58:17.367 OldTime 2012-12-04T11:58:19.477Z

The timeCreated of ‘bad request’: 2012-12-04T11:58:18.000Z

第二次出错:

NewTime 2012-12-10T12:11:49.858Z OldTime 2012-12-10T12:11:51.879Z

The timeCreated of ‘bad request’: 2012-12-10T12:11:51.000Z

很明显,已经找到这个偶然性问题的根本原因了。下一步就是看看如何避免这个"Microsoft Windows Kernel general"Event  


841°/8418 人阅读/0 条评论 发表评论

登录 后发表评论