我的电子邮箱不断能收到麻烦我进行疑难排查的邮件。很多案例看起来似乎没有办法解决,但是其实际上最后使用几个简单的步骤就可以有效解决或者避免问题发生。我已经通过超过400页的 PowerPoint 幻灯片积累了数以百计的这种类型的案例,让我可以有很多材料供我在博客上发表,以及之前在许多大型业界会议上进行主题为“无解的案例(Case of the Unexplained)”的系列演说。
我总是通过一些不起眼的工具和独特的疑难排查技术来寻找新的案例,越多越好。今天,我要向大家介绍一个很棒的案例,其中要用到两个非常有用的工具:Sysinternals Process Monitor 用来对比正常系统和问题系统的系统日志信息,Sysinternals PsExec 用来捕获登录过程中的活动。 问题是这样的,有一家大型企业的系统管理员了解到,很多员工都在抱怨系统登录太慢了,往往超过3分钟。虽然在登录之后没有任何问题,但漫长的登录过程让人很受伤,并且许多使用同一套软件配置的用户都会遇到该问题。为了准确找出原因,管理员调取了网络配置数据库中的信息,证明遇到问题的系统无一例外都是 Dell Precision 670 工作站。这位管理员认为自己已经找到了主要的线索,直到后来他发现,有一些采用完全相同配置的 Dell Precision 670 工作站却没有任何问题。 为了找出真正的线索,接下来他要试图去分析那些登录缓慢的系统。他通过 PsExec 工具,以 Local System 帐户身份运行了 Process Explorer 程序,这样即使注销帐户,程序也可以一直运行,直到下一次登录。因为运行的系统是 Windows XP,因此只需执行以下命令即可(Windows Vista 以上版本请看文末对此的介绍): “-s”参数指定 PsExec 以 Local System 帐户的身份运行,“-i”使该进程连接到交互式桌面,这样用户才可以看到其窗口,“-d”让程序自动返回,而不需要等到进程终止。需要注意的是,如果启用了“快速用户切换”,并且没有登录到会话 0,那就不要注销,而是直接切换用户,登录到有问题的帐户,然后切换回启动 PsExec 的那个帐户。 在随后的登录中,他注意到公司内部的业务程序 Lisa_client_7.0.0.0.exe 会在很短的时间内占用很高的 CPU,然后持续三分钟空闲,最后退出,在这之后,登录过程恢复正常: 在 Process Monitor 取代 Filemon 和 Regmon 两个工具之前,David Solomon 有一句话:“要是有疑问,那就运行 Process Monitor 吧!”(我十分赞同这句话,甚至在我女儿来问我关于家庭作业的问题时,我都会让她运行 Process Monitor)。这是讲这种观念应用到实际生活中的很好的示范,因为看起来 Process Monitor 并不能直接告诉你某个进程停止响应的原因,但是管理员仍然会使用它。 启动 Process Monitor 并监视了一次登录过程之后,管理员从最顶部开始分析起来。由于在 Process Explorer 观察到了上述现象,Lisa_client 是首要嫌疑对象,因此他右键单击进程名称,从右键菜单中选择了“包含”快速筛选命令,以便去除与其他进程活动相关的内容: 在通过 Process Monitor 排查无响应的问题时,大家应该首先看看在停止响应的时间段,某些操作是否存在时间间隙。你可以通过将“时长”数据列添加到显示界面,来寻找持续时间过长的操作,并且需要过滤掉平时就不太能立即完成的操作,例如目录更改通知。这种方法对于有多个线程,并且在引起无响应问题的操作时,某些操作又正常进行,很难看到时间延迟的进程来说,这种方法非常有效。 令他非常惊讶的是,这种方法让他很快就找到了一个不仅正好具有3分钟时间间隙,并且还带有不正常退出代码 IO DEVICE ERROR 的事件: 该事件表明,Lisa_client 进程对包含 C: 卷的磁盘执行了一个 SCSI 直通命令,在三分钟之后遇到硬件错误超时错误。为了了解正常启动的那些 670 计算机上该命令的执行结果,他同样进行一次捕获,发现该操作在那台计算机上只花了不到 1 毫秒的时间,并且成功执行: 这个证据清楚的指明,安装在一部分 670 系统中的硬盘有硬件问题,因此,他收集了所有 670 计算机上的磁盘类型, 试图将它们与报告的登录缓慢问题联系起来。最终发现,所有登录缓慢的系统使用的都是希捷硬盘,而其他系统使用的是富士通硬盘。 公司当然不希望只是因为自己的业务程序引起的问题而更换这些硬盘,因此管理员必须找到一个解决方案。他将该问题报告给了 Lisa_client 开发团队,得到的反馈是他们可以在不影响功能的情况下去掉此命令,不过可能需要几天时间让此次更新通过他们的内部发布流程。相比几天时间不能收集某些系统的信息,员工的工作更为重要,因此管理员写了一段 WMI 登录脚本,查询系统硬盘型号,仅当不是希捷硬盘时才去启动 Lisa_client。 如果没有 Process Monitor 的帮助,他也许同样可以发现硬盘是这些系统的主要差别,但是却不能保证他可以发现根本原因,并且采取补救措施,而不是完全替换掉硬盘。好了,这又是一次使用 Process Monitor 解决问题并且深入探查问题根源的案例。 最后,我要讲一讲之前提到的如何在 Windows Vista 及更高版本的系统中配置一个应用程序,使其不受登录和注销的影响。之前为 Windows XP 提供的 PsExec 命令对较新的操作系统是无效的,因为 Windows Vista 引入了 会话0隔离特性,需要其他命令以保证启动的应用程序在的登录之后可用。 首先,在提升权限的命令提示符中使用 PsExec,在会话0中启动该程序: psexec –sd –i 0 c:\sysint\procmon.exe 你将看到一个名为“交互式服务对话检测”的窗口在任务栏闪动,说明有一个带有窗口的程序正在隐藏的会话0桌面上运行。单击任务栏上的该窗口可以还原该通知对话框,然后单击“为我显示该消息”按钮以切换到该桌面: 这时你就可以看到启动的程序,并且配置你需要的设置(该程序运行在 Local System 帐户,因此不包含你的帐户的默认设置)。完毕之后,单击“返回”按钮回到主桌面。现在,你就可以注销然后再次登录,以便重现遇到的问题了。再次登录之后,执行下列命令可以让会话0桌面的入口提示重新出现: net stop ui0detect 好了,返回会话0桌面去查看已经捕获到的信息即可。psexec –sid c:\sysint\procexp.exe
net start ui0detect
本文由 wbpluto 翻译自 Mark Russinovich 的博客文章《The Case of the Slow Logons》。
[译]Windows 登录时间太长的案例
推荐 原创
©著作权归作者所有:来自51CTO博客作者wbpluto的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
windows服务器与ntpserver设置时间同步ntp windows 服务器
-
php案例:显示用户上次登录的时间
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。
php 开发语言 html 用户名