域中的笔记本电脑在 14 天内随机冻结几秒钟

域中的笔记本电脑在 14 天内随机冻结几秒钟

我们在 Windows 域中拥有多台 Windows 7 x64 笔记本电脑 Dell Latitude E5550。大约 1-2(-3?)周前,所有笔记本电脑开始在一天内随机冻结数次,每次持续几秒钟。

冻结意味着 Windows 完全没有响应,数字锁定灯切换工作一段时间,然后也停止工作,然后再次正常响应。整个过程相当随机地重复,冻结持续时间从几秒到最多约 20-30 秒。

我们尝试卸载有问题的 KB3114717,但没有任何改善。使用 AVG 防病毒软件、Office 2013、Windows 7 x64。


我知道这不足以给出任何答案,但是是否有像 Sysinternals ProcessMonitor 中的设置或过滤器可以让我查看是否有东西达到了 50% 或更多的 CPU 使用率?


当问题发生时,perfmon 报告空白,我认为这意味着它不可能由任何简单的过程引起,而一定是内核或驱动程序中的问题......?

在此处输入图片描述

进一步分析表明,问题与有关Process,即在冻结之前,以下计数器急剧上升:

  • 每秒页面错误数
  • 每秒输入/输出数据操作数
  • 每秒输入/输出读取操作的字节数
  • 每秒输入/输出读取操作数

但是在 PerfMon 数据中无法找到有关导致此问题的过程的任何信息。


发现几个麻烦制造者:1E NightWatchman、1E WakeUp Agent、Realtek Audio Service、AVG Service,有选择地尝试一下

答案1

我在这里编写此脚本是为了在需要“调试”系统故障时获取一些进程数据。它将在 powershell 会话中创建一个后台作业,等待进程退出

它获取工作站上运行的每个进程的所有 GDI 对象、句柄、RAM 等信息。也许您可以尝试使用此方法捕获导致故障的进程。

我猜想,由于计算机冻结,explorer.exe 进程没有响应。因此,只要 explorer.exe 的 Responding 属性不为真,我们就会触发 get-data 脚本。

只需在任何工作站上的 powershell 会话中启动此脚本即可。它将通过通知托盘中的气泡文本可视化故障。如果您想要邮件通知,只需在部分Send-Mailmessage后面添加一个Get-MachineData

您可以在后台作业运行时使用 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

答案2

我到目前为止还没有发现根本原因,但是计算机禁用了以下服务:

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

现在没有出现任何冻结问题。在禁用这些服务之前,它们偶尔会冻结。Input/output data operations per second在发生冻结之前,这些服务的 perfmon 性能会有所提高。

答案3

相关内容