У меня есть сервер с проблемой невыгружаемой памяти. Использование медленно увеличивается, пока оно не будет исчерпано, и сервер перестанет обслуживать веб-страницы, поскольку IIS не может получить достаточно невыгружаемой памяти.
Это 32-битный сервер Windows 2003.
Диспетчер задач не показывает подозрительной активности, и все запущенные процессы потребляют «нормальные» объемы памяти NP, и все они остаются стабильными с течением времени.
Тег, показывающий все использование, - «Четный», который предназначен для средства просмотра событий в соответствии со списком тегов. Никакие другие предупреждения или ошибки не отображаются в журналах событий, кроме случаев, когда память NP исчерпана и IIS начинает жаловаться.
На сервере работают MSSQL, IIS и hMailserver, больше ничего.
У кого-нибудь есть идеи или видели это раньше ..? Мне было бы куда пойти, если бы это был тег, связанный с драйвером, например сетевая карта или что-то в этом роде, но не средство просмотра событий, куда мне с этим пойти!
Выход Poolmon для ДАЖЕ
Tag Type Allocs Frees Diff Bytes Per Alloc
Even NonP 65563201 ( 948) 64585254 ( 861) 980124 47049280 ( -2384) 48
Спасибо
Когда проблема возникает, откройте диспетчер задач и добавьте Handles
столбец. Выполните сортировку по этому столбцу и найдите любые значения, которые кажутся чрезмерными. Это может помочь получить базовое состояние сервера при загрузке и с течением времени. Через какое время после загрузки обычно возникает проблема? Есть большая вероятность, что процесс с наибольшим / необычным числом дескрипторов будет вашим виновником, хотя точно определить, почему может быть совсем другое чудовище.
В моем случае я видел, что это было вызвано неудачей удаления агента CommVault (резервного копирования), в результате чего оставалась нефункциональная служба, которая каждые несколько секунд создавала два дескриптора HKCU (реестра). Каждый открытый дескриптор потребляет некоторое количество памяти и в конечном итоге ставит среду Exchange всей организации на колени.
Sysinternals handle.exe
также может быть полезен при просмотре того, какие процессы используют множество дескрипторов и к каким объектам прикреплены.
Первое, что я проверю, это убедиться, что max server memory (MB)
установлен в SQL Server. Это серверная опция, которая сообщает SQL Server «это вся память, которую вы можете иметь». По умолчанию SQL Server будет использовать всю доступную память для таких вещей, как кеши данных, что может быть плохой новостью в общей среде, такой как ваша.
В вашем экземпляре SQL откройте новое окно запроса и введите:
sp_configure 'show advanced options',1
GO
RECONFIGURE
GO
sp_configure 'max server memory (MB)'
Если значение для config_value
равно 0, то это означает, что SQL Server разрешено использовать всю необходимую память. В этом случае вам следует установить более подходящее для вашей среды значение.
Вы не упоминаете, сколько памяти имеет ваш сервер, но поскольку вы находитесь в 32-битной среде (и вы также не указываете, какая версия Windows), я собираюсь пойти дальше и предположить, что 4 ГБ. Возможно, вы захотите ограничить SQL до 1 ГБ, чтобы разрешить другие службы приложений. Сделать это можно так:
sp_configure 'max server memory (MB)',1000
GO
RECONFIGURE
GO
Если вы используете Windows 2003 Enterprise и имеете> 4 ГБ памяти, вы, конечно, можете установить максимальный объем памяти больше этого значения.
Вы также можете исследовать использование расширений Address Windowing Extensions (AWE), которые могут дать вам больше пространства для передышки. Вы можете прочитать об этом на TechNet Вот.