У нас есть несколько ноутбуков с Windows 7 x64 Dell Latitude E5550 в домене Windows. Примерно 1-2 (-3?) Недели назад все начали беспорядочно замерзать несколько раз в течение дня на несколько секунд.
Зависание означает, что Windows полностью перестает отвечать на запросы, некоторое время работает переключение света numlock, затем оно тоже перестает работать, затем снова становится нормально реагировать. Весь процесс повторяется довольно случайным образом, и время зависания занимает от нескольких секунд до макс. примерно 20-30 секунд.
Мы попытались удалить проблемный KB3114717, но без улучшений. Использование антивируса AVG, Office 2013, Windows 7 x64.
Я понимаю, что этого недостаточно, чтобы дать какой-либо ответ, но есть ли настройка или фильтр, как в Sysinternals ProcessMonitor, который позволил бы мне увидеть, ударил ли что-то вроде 50% ЦП или более?
Когда возникает проблема, perfmon сообщает о пустом пространстве, что, как я полагаю, означает, что это не может быть вызвано каким-либо простым процессом и должно быть проблемой в ядре или драйверах ...?
Из дальнейшего анализа кажется, что проблема связана с Process
, а именно следующие фишки идут круто вверх прямо перед замораживанием:
Но не могу найти никакой информации о том, какой процесс вызвал это в данных PerfMon.
Нашел несколько кандидатов в смутьяны: 1E NightWatchman, 1E WakeUp Agent, Realtek Audio Service, AVG Service, собираюсь пробовать их выборочно
Я написал этот сценарий здесь, чтобы получить данные о процессах, когда мне нужно «отладить» сбой системы. Он создаст фоновое задание в сеансе PowerShell, которое ожидает выхода из процесса.
Он получает информацию обо всех GDI-объектах, дескрипторах, ОЗУ и т. Д. Для каждого процесса, запущенного на рабочей станции. Может быть, вы можете попытаться поймать процесс, который приводит к сбою этим.
Я УГАДАЮ, поскольку компьютер зависает, процесс explorer.exe не отвечает. Таким образом, мы будем запускать сценарий получения данных всякий раз, когда свойство ответа explorer.exe не соответствует действительности.
Просто запустите этот сценарий в сеансе 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
Мне пока не удалось обнаружить основную причину, но компьютеры со следующими отключенными службами:
теперь нулевое количество проблем с зависанием. Перед отключением этих сервисов они иногда зависали. Input/output data operations per second
подняться для этих служб в perfmon до того, как произойдет замораживание.
Попробуйте отключить ipv6, это может быть известная уязвимость.
https://blog.coresecurity.com/2014/03/25/ms14-006-microsoft-windows-tcp-ipv6-denial-of-service-vulnerability/