запуск множества терминалов - страница 2

 

Добавил памяти. Перезапустил машинку. Снова только 23 терминала.

 
KimIV >>:

Запустить удалось до 23-го, то есть итого ДВАДЦАТЬ ТРИ терминала. 24-ый не запускается.

Открыл окно диспетчера задач и вижу, что упёрся в лимит памяти.

Неудивительно, ведь физической памяти всего 256 мб.

Но проблема не в памяти, а в физическом ограничении количества записей в системной таблице дескрипторов Windows. Это родовой косяк Windows, идущий еще из Windows 3.1, где ради экономии побитово упихали в 32х битовый дескриптор специально системую (графические, оконные и тд) таблицу. Когда-то казалось, что этого хватит на все случаи жизни (как и 640 кб памяти в свое время).


Результатом является резкий стоп из-за нехватки системных дескрипторов, когда рядом свободно 2-3 гигабайта памяти. Фактически, это архитектурная ошибка Windows.

 

Аналогичным образом проверил в Windows Server 2003 Enterprise Edition.

Тоже 23 терминала. У кого-нибудь есть 64-разрядные ОСи? Как там будет обстоять дело?

 
Renat писал(а) >>
Но проблема не в памяти, а в физическом ограничении количества записей в системной таблице дескрипторов Windows.
...
Фактически, это архитектурная ошибка Windows.

Благодарю, Ренат! Теоритически это всё понятно. Но мне хочется ещё и на практике это ощутить, так сказать, руками пощупать...

 
KimIV >>:

Аналогичным образом проверил в Windows Server 2003 Enterprise Edition.

Тоже 23 терминала. У кого-нибудь есть 64-разрядные ОСи? Как там будет обстоять дело?

В данном случае лучше поверить теории: при неизменной архитектуре таблицы системных дескрипторов в 32 разрядной Windows все будет одинаково в любой версии.


А в 64 разрядной версии Windows этой проблемы для нативных 64 битных программ нет. Об этом явно написано в документации при рассмотрении проблемы ограничения таблицы системных дескрипторов в 32 разрядной Windows. Я не уверен про снятие ограничений в таблицах при запуске 32 разрядных программ в режиме эмуляции Windows 64.

 

Может запустить win xp в нескольких виртуальных машинах? При этом можно порезать в XP ненужные сервисы/функциональность, например выбросить explorer, а вместо него что-нибудь легкое и нештатное поставить?

Вот есть хороший монитор ресурсов, который контролирует в том числе количество различных задействованных хэндлов и может выдавать предупреждение если их количество превысит порог:

http://www.iarsn.com/abpmon.html

 
Renat писал(а) >>

Ограничения из-за недостатка дескрипторов (их фиксированное количество всего около 16000 - это жесткое ограничение операционки) Windows.

Это ключ реестра Windows с названием GDIProcessHandleQuota - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Current Version\Windows\GDIProcessHandleQuota, в Windows 2000, XP может принимать значение до 16384 включительно.

В то же время на http://blogs.technet.com/askperf/archive/2008/02/01/ws2008-upgrade-paths-resource-limits-registry-values.aspx утверждают, что переход на Windows Server 2008 даст этому ключу практически бесконечное значение (цитата): "* - the maximum values are too high for practical use, however there is no specific per-process limit.".

Попробую проверить это на бесплатной редакции Windows Server 2008 x86 RUS.

А вообще про GDI Objects в MSDN написано, что текущий лимит для x86 этого ключа равен "65,536 GDI handles", т.е. уже в 4 раза больше, чем 16384. Можно попробовать изменить ключ реестра.

 
chv писал(а) >>

Можно попробовать изменить ключ реестра.

В 2000-ом поставил 65536 (было 10000). Перезагрузил... 24-ый терминал запустить не удалось...

 
KimIV писал(а) >>

В 2000-ом поставил 65536 (было 10000). Перезагрузил... 24-ый терминал запустить не удалось...

Не, на http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx написано, что для Windows 2000 лимит этого ключа остался в 16384. Нужно ставить эксперименты на более поздних версиях. Я в VMware 6.5 на Windows XP x86 RUS SP2 поставил 25 терминалов, изменил два ключа (GDI handles и User process handles) в одной подветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Current Version\Windows\, перезагрузка.

После этого запустилось лишь 20 терминалов, было открыто ~9300 handles (по Task Manager), похоже, как в комментарии в MSDN написано, реальный лимит этого значения примерно 10000 дескрипторов.

Нужен эксперимент, видимо, на Windows Web Server 2008 x86.

Либо избавиться от графической части, запустив терминал в виде NT службы.

 
Так, вроде про хендлы Ринат ответил, поэтому я уже не буду. Запускал как-то на 2003 сервере 64 битном, теже 20 с копейками терминалов. С тех пор не парюсь и ставлю очередную vmware и получаю еще 20 терминалов. И так пока памяти хватит или мощности процессора.
Причина обращения: