У меня увеличилось количество недействительных дескрипторов в системном процессе (Windows Server 2008R2 x64). Сумма составляет примерно 1 000 000 в неделю.
Согласно Process Explorer тип дескриптора - файл. Из диспетчера задач кажется, что память не назначена ни одному из процессов, но график показывает высокое (и растущее) использование физической памяти.
Как избежать или освободить недействительные системные дескрипторы?
Я еще не смог найти первопричину, но понял, как ее устранить.
Когда я скопировал один из файлов для его анализа, я обнаружил, что недействительный дескриптор был «повторно использован» или «обновлен» и должным образом закрыт. Кажется, что операции с файлом, такие как открытие, копирование, удаление, фиксируют дескриптор. Итак, я создал сценарий PowerShell, который сначала получает список дескрипторов с помощью утилиты Ручка v3.51 и откройте затронутые файлы. После первого запуска количество дескрипторов уменьшилось, использование физической памяти также начало уменьшаться, и после нескольких запусков все выглядит нормально. Уборка планируется каждую ночь.
$handlesLog = .\handle.exe -p 4 # 4 is System process id
foreach ($line in $handlesLog)
{
if ($line -match "<here is the pattern of affected files>")
{
$fileToCopy = <full path to the file>
if ([System.IO.File]::Exists($fileToCopy))
{
try
{
$fileStr = New-Object System.IO.FileStream($fileToCopy,[System.IO.FileMode]::Open, [System.IO.FileAccess]::Read)
}
finally
{
$fileStr.Close()
$fileStr.Dispose()
}
}
}
}
У вас включены офлайн-файлы? Вы можете отключить их, выбрав Панель управления> Центр синхронизации> Отключить автономные файлы (слева). Возможно, сервер пытается загрузить автономную копию файлов, поэтому не закрывает дескрипторы должным образом. Просто выстрел в темноте.