Сколько используемых дескрипторов Windows - это “слишком много”?

StackOverflow https://stackoverflow.com/questions/951419

  •  11-09-2019
  •  | 
  •  

Вопрос

Я понимаю, что ответ на этот вопрос может зависеть от настроек реестра и от версии Windows, и, возможно, от объема оперативной памяти, если памяти недостаточно.Ради этого вопроса предположим, что на сервере достаточно оперативной памяти (3 + гигабайт).

Если приложение (в данном случае стороннее приложение) пропускает дескрипторы со скоростью несколько сотен в час, сколько всего дескрипторов может пропустить это приложение, прежде чем другие приложения столкнутся с проблемами?Под "проблемами" я подразумеваю, например, невозможность запустить поток, невозможность открыть файл и так далее.

Я видел, что некоторые серверы (слегка загруженные) отлично работают с процессом (обычно процессом базы данных), использующим несколько десятков тысяч дескрипторов, поэтому старое ограничение в 10000 дескрипторов здесь явно не проблема.(И в любом случае это было ограничение для каждого процесса, так что это не повлияло бы на мое приложение, которое значительно ниже этого уровня.)

Может ли кто-нибудь либо ответить на вопрос, либо указать мне на некоторые ресурсы, которые объясняют, сколько всего дескрипторов будет разрешено сервером Windows, прежде чем вы эффективно исчерпаете (дескрипторы или другие системные ресурсы)?

Это было полезно?

Решение

Видеть Пост Рэймонда Чена на эту тему.Оконный менеджер устанавливает ограничение в 10 КБ на процесс и общий лимит в 32 КБ по всей системе.Таким образом, если он «всего» пропускает 100 дескрипторов в час, у вас есть несколько дней безотказной работы, прежде чем он начнет плохо себя вести.

Обратите внимание, что не все дескрипторы одинаковы.Например, дескрипторы окон не являются дескрипторами БД и могут подчиняться другим правилам.Таким образом, это ограничение может не применяться, в зависимости от того, какие дескрипторы просачиваются из программы. Также прочитайте этот пост в блоге.

Другие советы

Тот самый куча рабочего стола, который представляет собой пул памяти, в котором хранится реальный "материал", который представляет дескриптор. Иногда важно не столько то, сколько дескрипторов вы выделили, сколько объем памяти для каждого объект под этим дескриптором находится using. Вы можете отладить кучу сюда.Это боль для установки.

(это было переработано из другого моего ответа)

Поскольку эти значения могут измениться в новых версиях Windows, вы можете использовать инструмент SysInternals. TestLimit / TestLimit64 чтобы получить приблизительную оценку.Версия x64 может работать некоторое время, особенно для проверки памяти (она может использовать жесткий диск (файл подкачки), чтобы получить больше виртуальной памяти).

Получите инструменты от http://live.sysinternals.com/WindowsInternals/ или http://download.sysinternals.com/files/TestLimit.zip

Параметры командной строки:

-p check process limit
-t check thread limit
-h check handle limit
-u check user handle limit

В соответствии с этот, 10000.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top