Показать сообщение отдельно
Старый 31.10.2007, 01:03   #19  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Странно это все... Сейчас посмотрел на примере KR2, как вообще это ограничение работает, и получается примерно вот что.
  • AOS читает строковый параметр MaxMemPercentage из реестра, переводит в число, проверяет, чтоб оно не было больше 100, и прописывает себе в переменную, где по умолчанию значится 50.
  • При попытке нового клиента подключиться к AOS последний сначала выполняет проверку на то, не достигнут ли максимальный уровень использования ресурсов, т.е. количество одновременных подключений и размер используемой памяти.
    • Максимальное число подключений проверяется очень просто: у AOS'а есть счетчик, который он увеличивает/уменьшает на 1 с помощью функций InterlockedIncrement/InterlockedDecrement при каждом открытии и, соотв., закрытии нового соединения. Это значение сравнивается с переменной, которая по умолчанию равна 100 и может меняться через настройки в реестре. При превышении ее значения выводится соотв. сообщение в EventLog.
    • Максимальный объем используемой памяти проверяется следующим образом. По собственному дескриптору процесса AOS с помощью фунции GetProcessMemoryInfo() получает данные в виде структуры PROCESS_MEMORY_COUNTERS. В этой структуре он сравнивает поле QuotaPagedPoolUsage со значением своей переменной - максимального процента используемой памяти, - умноженной на 21474836 (т.е. в теории AOS расчитывает "потребить" до 2Gb из нерезидентного пула памяти). Если значение QuotaPagedPoolUsage больше, то выводится сообщение в EventLog, где для информации почему-то указывается QuotaNonPagedPoolUsage, т.е. текущий объем использованного резидентного пула памяти.
  • Eсли один из пределов достигнут, то новое подключение закрывается, и в EventLog опять же выводится сообщение о том, что по этой причине попытка подключения была отклонена.
Так вот, что у вас AOS пишет в EventLog? И, главное, вы уверены, что параметр MaxMemPercentage у вас для AOS'а прописан в реестре в нужной конфигурации и именно как строка - REG_SZ (об этом говорится в документации)?

Возможно, конечно, что воду мутит SmartHeap - надо будет отдельно проверить, как она по умолчанию настраивается AOS'ом.