我们在Windows域中有多个Windows 7 x64笔记本电脑戴尔Latitude E5550。 Cca 1-2(-3?)星期前,所有人在一天中几次随机冻结几秒钟。
冷冻意味着Windows完全没有反应,numlock灯开关工作一段时间,然后停止工作,然后再次正常响应。 整个过程非常随机地重复,冻结时间从几秒到最大。 cca 20-30秒。
我们已经尝试卸载有问题的KB3114717,但没有任何改进。 使用AVG防病毒,Office 2013,Windows 7 x64。
我明白,这是不够的给任何答案,但是有设置或过滤像Sysinternals ProcessMonitor,让我看看是否有什么东西像50%的CPU或更多?
当问题发生时,perfmon报告空白空间,我想这意味着它不能由任何简单的过程引起,并且必须是内核或驱动程序内的问题…?
从进一步的分析看来,这个问题与Process ,也就是在冻结之前,柜台急剧上涨:
但是在PerfMon数据中找不到任何信息。
发现了一些麻烦制造者:1E NightWatchman,1E唤醒代理,Realtekaudio服务,AVG服务,有select地尝试
当我需要“debugging”系统故障时,我在这里编写了这个脚本来获取一些进程数据。 它将在等待进程退出的PowerShell会话中创build后台作业
它获取工作站上运行的每个进程的所有GDI对象,句柄,RAM等信息。 也许你可以试着去捕捉这个造成失败的过程。
因为计算机冻结,我猜GUESS.exe进程没有响应。 因此,只要explorer.exe响应属性不正确,我们就会触发get-data脚本。
只需在任何需要的工作站上的PowerShell会话中启动此脚本。 它会通过通知托盘中的气泡文字显示失败。 如果你想要一个邮件通知,只需在Get-MachineData部分后面添加一个Send-Mailmessage 。
您可以在后台作业运行时使用PowerShell。 使用get-job ,看看工作是否真的在运行。
Detailinformation将被保存在%userprofile%\ ProcessDetails.txt中
Start-Job -name CatchSystemFailure { $sig = @' [DllImport("User32.dll")] public static extern int GetGuiResources(IntPtr hProcess, int uiFlags); '@ Add-Type -MemberDefinition $sig -name NativeMethods -namespace Win32 [Reflection.Assembly]::LoadWithPartialName("System.Drawing") | Out-Null [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null function Get-MachineData( [switch]$AllProcessDetails, [switch]$RAM ) { switch($PSBoundParameters.GetEnumerator().Where({$_.Value -eq $true}).Key) { 'AllProcessDetails' { $processes = [Diagnostics.Process]::GetProcesses() | select Name, Responding, NPM, PM, WS, VM, Cpu, Handles, @{n='GDI-Objects';e={ [Win32.NativeMethods]::GetGuiResources($_.Handle, 0).ToString()} } | sort Name Write-Output $processes } 'RAM' { $ComputerSystem = gwmi Win32_operatingsystem -Property TotalVisibleMemorySize, FreePhysicalMemory $FreePhysicalMemory = "{0:N2}" -f (($ComputerSystem.FreePhysicalMemory) / (1mb)) $TotalVisibleMemorySize = "{0:N2}" -f (($ComputerSystem.TotalVisibleMemorySize) / (1mb)) $TotalFreeMemPerc = "{0:N2}" -f (($FreePhysicalMemory/$TotalVisibleMemorySize)*100) $Memory = New-Object PSCustomObject –Prop (@{ 'Server-RAM'=$TotalVisibleMemorySize + "GB"; 'Free RAM'=$FreePhysicalMemory + "GB"; 'Free RAM in %'=$TotalFreeMemPerc + "%" }) | fl * Write-Output $Memory } }} while ((Get-Process system).Responding) {sleep -Milliseconds 50} if (!(Get-Process system).Responding) { $SystrayIcon = New-Object System.Windows.Forms.NotifyIcon $SystrayIcon.Icon = [system.drawing.icon]::ExtractAssociatedIcon($pshome + "\powershell.exe") $SystrayIcon.BalloonTipText = "system failure! inform your systemadministrator!" $SystrayIcon.BalloonTipTitle = "Process Watcher" $SystrayIcon.Visible = $true $SystrayIcon.ShowBalloonTip(600) $SystrayIcon.dispose() Get-MachineData -AllProcessDetails -RAM | out-file $env:USERPROFILE\ProcessDetails.txt -Force } } | out-null
到目前为止,我没有find根本原因,但禁用了以下服务的计算机:
现在有零计数的冻结问题。 在禁用他们偶尔冻结的服务之前。 在发生冻结之前,perfmon中的服务Input/output data operations per second上升。