Windows-7

過去 14 天,域中的筆記型電腦全部隨機凍結幾秒鐘

  • March 22, 2016

我們在 Windows 域中有許多 Windows 7 x64 筆記型電腦 Dell Latitude E5550。Cca 1-2(-3?) 幾週前都開始在一天中隨機凍結幾次,持續幾秒鐘。

凍結意味著 Windows 完全沒有響應,numlock 燈開關工作了一段時間,然後它也停止工作,然後又恢復正常響應。整個過程非常隨機地重複,凍結持續時間從幾秒到最長不等。cca 20-30 秒。

我們已嘗試解除安裝有問題的 KB3114717,但沒有任何改善。使用 AVG 防病毒軟體、Office 2013、Windows 7 x64。


我知道這不足以給出任何答案,但是是否有像 Sysinternals ProcessMonitor 中的設置或過濾器,可以讓我查看 CPU 是否達到 50% 或更多?


當問題發生時,perfmon 報告空白,我想這意味著它不能由任何簡單的程序引起,並且必須是核心或驅動程序中的問題……?

在此處輸入圖像描述

從進一步分析看來,問題與Process,即以下計數器在凍結之前急劇上升:

  • 每秒分頁錯誤
  • 每秒輸入/輸出數據操作
  • 每秒輸入/輸出讀取操作的字節數
  • 每秒輸入/輸出讀取操作

但是在 PerfMon 數據中找不到任何有關導致此問題的過程的資訊。


找了幾個找麻煩的人選:1E NightWatchman, 1E WakeUp Agent, Realtek Audio Service, AVG Service,有選擇的去試試

到目前為止,我還沒有找到根本原因,但是禁用了以下服務的電腦:

  • 1E 守夜人
  • 1E 喚醒代理

現在凍結問題的數量為零。在禁用這些服務之前,它們偶爾會凍結。Input/output data operations per second在凍結髮生之前,這些服務在 perfmon 中的上升。

當我需要“調試”系統故障時,我在這裡編寫了這個腳本來獲取一些程序數據。它將在等待程序退出的 powershell 會話中創建一個後台作業

它獲取工作站上執行的每個程序的所有 GDI 對象、句柄、RAM 等資訊。也許你可以嘗試用這個來捕捉導致失敗的過程。

我猜由於電腦當機,explorer.exe 程序沒有響應。因此,只要 explorer.exe 響應屬性不正確,我們就會觸發 get-data 腳本。

只需在您想要的任何工作站上的 powershell 會話中啟動此腳本。它將通過通知托盤中的氣球文本視覺化失敗。如果您想要郵件通知,只需Send-MailmessageGet-MachineDataPart 後面加上一個。

您可以在後台作業執行時使用 PowerShell。用於get-job查看作業是否真的在執行。

詳細資訊將保存在 %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

引用自:https://serverfault.com/questions/762861