web-dev-qa-db-ja.com

ドメイン内のラップトップはすべて、過去14日間に数秒間ランダムにフリーズします

Windowsドメインには多数のWindows7x64ラップトップDellLatitudeE5550があります。 Cca 1-2(-3?)週間前、すべてが1日のうち数秒間ランダムに数回フリーズし始めました。

フリーズとは、Windowsが完全に応答しなくなり、numlockライトの切り替えがしばらく機能し、その後も機能しなくなり、通常の応答性に戻ることを意味します。プロセス全体が非常にランダムに繰り返され、フリーズ期間は数秒から最大になります。 cca 20〜30秒。

問題のあるKB3114717をアンインストールしようとしましたが、改善されていません。 AVGアンチウイルス、Office 2013、Windows 7x64を使用します。


これでは答えを出すのに十分ではないことは理解していますが、Sysinternals ProcessMonitorのように、CPUが50%以上のようにヒットしたかどうかを確認できる設定やフィルターはありますか?


問題が発生すると、perfmonは空白を報告します。これは、単純なプロセスが原因ではなく、カーネルまたはドライバー内の問題である必要があることを意味していると思います...?

enter image description here

さらなる分析から、問題はProcessに関連しているようです。つまり、次のカウンターはフリーズの直前に急上昇します。

  • 1秒あたりのページング障害
  • 1秒あたりの入出力データ操作
  • 1秒あたりの入出力読み取り操作のバイト数
  • 1秒あたりの入出力読み取り操作

しかし、PerfMonデータでこれを引き起こしたプロセスごとの情報を見つけることができません。


トラブルメーカーの候補はほとんど見つかりませんでした:1E NightWatchman、1E WakeUp Agent、Realtek Audio Service、AVG Service、それらを選択的に試してみる

3
Vojtěch Dohnal

これまで根本的な原因を見つけることはできませんでしたが、次のサービスが無効になっているコンピューター:

  • 1ENightWatchman
  • 1Eウェイクアップエージェント

凍結の問題はゼロカウントになりました。これらのサービスを無効にする前に、時々フリーズします。 Input/output data operations per secondフリーズが発生する前に、perfmonでこれらのサービスの上昇。

0
Vojtěch Dohnal

システム障害を「デバッグ」する必要があるときにプロセスのデータを取得するために、このスクリプトをここに記述しました。プロセスの終了を待機するPowerShellセッションでバックグラウンドジョブを作成します

ワークステーションで実行されている各プロセスのすべてのGDIオブジェクト、ハンドル、RAMなどの情報を取得します。これで、障害を引き起こすプロセスをキャッチしようとすることができます。

コンピューターがフリーズしたため、Explorer.exeプロセスが応答していないと推測します。そのため、Explorer.exe Responding-propertyがtrueでない場合は常に、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
1
SimonS