
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добавил памяти. Перезапустил машинку. Снова только 23 терминала.
Запустить удалось до 23-го, то есть итого ДВАДЦАТЬ ТРИ терминала. 24-ый не запускается.
Открыл окно диспетчера задач и вижу, что упёрся в лимит памяти.
Неудивительно, ведь физической памяти всего 256 мб.
Но проблема не в памяти, а в физическом ограничении количества записей в системной таблице дескрипторов Windows. Это родовой косяк Windows, идущий еще из Windows 3.1, где ради экономии побитово упихали в 32х битовый дескриптор специально системую (графические, оконные и тд) таблицу. Когда-то казалось, что этого хватит на все случаи жизни (как и 640 кб памяти в свое время).
Результатом является резкий стоп из-за нехватки системных дескрипторов, когда рядом свободно 2-3 гигабайта памяти. Фактически, это архитектурная ошибка Windows.
Аналогичным образом проверил в Windows Server 2003 Enterprise Edition.
Тоже 23 терминала. У кого-нибудь есть 64-разрядные ОСи? Как там будет обстоять дело?
Но проблема не в памяти, а в физическом ограничении количества записей в системной таблице дескрипторов Windows.
...
Фактически, это архитектурная ошибка Windows.
Благодарю, Ренат! Теоритически это всё понятно. Но мне хочется ещё и на практике это ощутить, так сказать, руками пощупать...
Аналогичным образом проверил в 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
Ограничения из-за недостатка дескрипторов (их фиксированное количество всего около 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. Можно попробовать изменить ключ реестра.
Можно попробовать изменить ключ реестра.
В 2000-ом поставил 65536 (было 10000). Перезагрузил... 24-ый терминал запустить не удалось...
В 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 службы.