概括:本周末,一个长期运行的虚拟 Windows Server 2012 系统变得非常慢;我们从远程进行了尝试Restart-Computer -ComputerName xyzzy -Force
,从各方面来看都是成功的;除了有些进程看起来至少经历了 10 次重启。
这是我使用 Windows 20 多年来第一次遇到这种情况,所以我真的想知道发生了什么事。
以下是按时间顺序讲述的故事:
- 该系统在 2014 年 8 月 8 日至 2015 年 1 月 19 日期间至少重启过 10 次。最后一次重启是在 1 月 16 日。
- 在 VMware ESXi 5.5.0 上运行的虚拟机几乎无法通过基于 Web 的 UI 和远程桌面访问:其行为表明某个或某些进程正在占用 CPU。
- 我们决定使用 Powershell 从另一个 Windows 系统重新启动服务器:
Restart-Computer -ComputerName xyzzy
。 - 这花了很长时间,然后返回一个错误,表明用户仍然处于登录状态。
- 公平地说,让我们施加力量:
Restart-Computer -ComputerName xyzzy -Force
。 - 这花了很长时间然后才恢复。
- 与此同时,我
ping -t xyzzy
运行了一次,检查网络接口是否会关闭,检查是否真的重新启动了。它确实重新启动了:大约一两分钟Request timed out.
后,ping 响应又恢复了。 - 然后我成功连接了远程桌面。这弹出一个对话框说系统意外关闭,并要求我填写原因。
- 这有点出乎意料,但在远程之后可能成为标准
Restart-Computer
。
- 这有点出乎意料,但在远程之后可能成为标准
- 为了找出该对话框的原因,我检查了事件查看器,没有发现任何异常。我确实观察到了各种内核启动和大量相关事件,报告的正常运行时间为 20 秒和 79 秒。
- (暂时什么也没有)
然后我们发现系统又变慢了,我连接了远程桌面,用 Process Explorer 查看了一下。结果如下:
最右边的一列是 Process Explorer 的“开始时间”列,日期为 1/19(2015 年 1 月 19 日)和 8/14(2014 年 8 月 14 日),我根据该列进行了排序。
2014 年 8 月听起来像是我们上次重启此系统的真实日期。管理所示 java.exe 进程的另一个进程也观察到了相同的日期时间:它报告进程于 158 天前启动。根据 Process Explorer,这些进程正在消耗 CPU 并使系统变慢。最后,java.exe 进程 3248、4568 和 4236 的每个进程日志文件没有给出任何迹象表明这些进程曾经停止过:它们有 2014 年 8 月 14 日和重启后最初几分钟的日志消息。
所以我只能得出一个结论:系统已重启约 90%,包括网络堆栈和写入内核启动事件的部分,但重启后仍有 10 个进程存活。
那么,什么原因可能导致这种情况发生呢?
是否可能存在 2014 年 8 月的旧 VMware 映像/快照与全新启动之间的奇怪混淆?请注意,VMware 没有此系统的快照。
请注意,由于系统再次变得不可用,我进行了Restart-Computer -Force
本地操作,导致重新启动,这次没有剩余进程。所以现在一切看起来都很好,但我不再有实时系统:我只能进行取证。