Назад | Перейти на главную страницу

Слишком много недопустимых дескрипторов в системном процессе

У меня увеличилось количество недействительных дескрипторов в системном процессе (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()
            }
        }
    }
}

У вас включены офлайн-файлы? Вы можете отключить их, выбрав Панель управления> Центр синхронизации> Отключить автономные файлы (слева). Возможно, сервер пытается загрузить автономную копию файлов, поэтому не закрывает дескрипторы должным образом. Просто выстрел в темноте.