31.10.2007, 01:03
|
#19
|
Участник
Регистрация: 28.11.2005
Адрес: Москва
|
Странно это все... Сейчас посмотрел на примере 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'ом.
|
|