如何配置“按访问防病毒”以实现更快的启动?

如何配置“按访问防病毒”以实现更快的启动?

我正在尝试优化我们的 700 个 Windows XP 工作站的启动过程,我们经常收到有关现场工作站的启动和登录时间的投诉。

分为两部分来看,第一部分使用启动Vis监视和检查启动过程;第二部分使用进程监控监控登录过程。使用 BootVis 的“启动完成”路径点作为指标,我利用了 VMWare 工作站虚拟机,该虚拟机已作为通用测试机器使用了大约 18 个月(因此是现场机器的典型代表)。我使用快照将虚拟机返回到每次测试之前的初始状态。

从 BootVis 创建的日志和报告中可以看出,最明显的延迟来自Sophos 防病毒软件在访问扫描仪上,后面是 mrxsmb。我调整了机器的策略(确保每次都强制 Sophos 更新两次),得出了以下数字:

  • 读取时扫描所有文件:260 秒
  • 写入时扫描所有文件:160 秒
  • 读取和写入时扫描可执行文件:111秒
  • 读取时扫描可执行文件:99 秒
  • 写入时扫描可执行文件:95 秒
  • 按访问扫描已禁用:102秒

以上内容表明,读取时扫描所有文件是迄今为止最昂贵的操作(可能完全没有必要)。我不太明白为什么禁用访问时扫描实际上会减慢启动顺序,尽管只是一点点。最后三个结果几乎相同,这意味着我必须使用其他因素来影响我选择读取时扫描可执行文件或写入时扫描可执行文件的决定。


更新:

我在同一台虚拟机上进行了更多测试(在一天中的不同时间,因此不能直接与上述结果进行比较:

  • Sophos 未安装:67.4 秒(5 次测试的平均值)
  • 读取时扫描可执行文件:84.5 秒(5 次测试的平均值)
  • 写入时扫描可执行文件:85 秒(5 次测试的平均值)

平均使得读取和写入的值进一步收敛,有趣的是,使用 Sophos 扫描可执行文件仅比未安装 Sophos 增加 21% 的性能开销。


那么,在配置按访问扫描以改善启动时间时,我还应该考虑哪些因素?

答案1

我们目前正在调查 SOPHOS 速度问题,我提出了以下建议,这些建议在我们的 winxp sp3 环境中产生了相当大的影响:

  1. 在按访问部分中排除这些文件:

    • 目录:\windows\system32\authz.dll
    • 目录
    • 目录:\windows\system32\es.dll
    • c:\windows\system32\netman.dll
    • 目录:\windows\system32\oakley.dll
    • 目录:\windows\system32\pstorsvc.dll
    • 目录:\windows\system32\rasadhlp.dll
    • 注册表编辑器
    • c:\windows\system32\winipsec.dll 它们是启动文件,只要您在某个时候运行完整的系统扫描,就应该没问题。
  2. 第二件事是关闭启动时检查更新。这有点危险,因为这是新病毒攻击的关键点,但您可以通过定期 30 分钟检查更新来应对这种情况,这意味着您永远不会超过半小时。要关闭检查更新,请执行以下操作:

替代文本 http://www.sophos.com/images/common/misc/27646.gif

实施这些改变之后,从开机到桌面的速度明显提升。

我希望这有帮助。

基普

答案2

我没有使用过 Sophos,所以不确定是否有类似的东西,但在 Symantec 中,您可以进行注册表更改以禁用启动时的完整系统扫描。如果没有这个,Symantec 将在系统首次启动时扫描所有内容,这可能会导致系统启动后的最初一段时间内运行非常缓慢。Sophos 中可能有一个类似的设置。

当然,禁用此功能可能会稍微降低安全性。他们进行启动扫描是有原因的。

答案3

我们在旧机器上遇到了与 McAfee 相同的问题。这些机器无法访问互联网,因此我编写了一个启动脚本,将服务的启动延迟几分钟。

' Place script in C:\Documents and Settings\All Users\Start Menu\Programs\Startup
' The McShield and McTaskManager services must be set to Manual

Wscript.sleep 12000 'Delay start for 2 minutes

Set objWMIService = GetObject ("winmgmts:{impersonationLevel=impersonate, (Debug)}\\.\root\cimv2")

StartService "McShield"     
StartService "McTaskManager"

Function StartService (strService)
    Dim intStatus, colServices, objService
    Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service Where Name = " & chr(39) & strService & chr(39))
    For Each objService in colServices
        intStatus = objService.StartService
    Next
End Function

对于您的情况来说,这可能不切实际,但对于我们来说,该解决方案很有效。

相关内容