Сколько дескрипторов Windows используется "слишком много"?

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

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

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

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

4 ответов


посмотреть сообщение Раймонда Чена по этой теме. Диспетчер окон применяет ограничение 10K для каждого процесса и имеет общий предел 32K по всей системе. Поэтому, если он "только" протекает 100 ручек в час, у вас есть несколько дней безотказной работы, прежде чем он начнет плохо себя вести.

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


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

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


поскольку эти значения могут изменяться с новыми версиями 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.