Кэширование Asp.net и использование памяти w3p - PullRequest
0 голосов
/ 21 июня 2009

Веб-приложение для хранения изображений в базе данных.

В нашей первой установке мы хранили (и обслуживали) изображения из базы данных, размер которой был изменен в кэше asp.net. Это было все хорошо, но когда в Интернете стало появляться все больше и больше хитов, мы начали испытывать странные проблемы, и под странными я имею в виду странные - от сбоя w3p без каких-либо подробностей до случайных исключений OutOfMemoryException, возникающих повсюду пару раз в день.

Я подозревал, что кеш asp.net может быть использован нами здесь неправильно, поэтому я переписал кеширование изображений, чтобы перейти к файловой системе. Наш обработчик изображений теперь проверяет наличие измененного изображения в каталоге кеша, если такого изображения не существует, извлекает его из базы данных, сохраняет его в каталоге кеша и обслуживает его оттуда.

Меня беспокоит использование памяти w3p для этого веб-сайта. Раньше, когда мы использовали объект кэша asp.net, типичное использование памяти для w3p составляло около 600 МБ. Теперь, когда обработчик обслуживает изображения из файловой системы, типичное использование памяти составляет около 750 МБ. Каким-то образом я ожидал, что он снизится (хотя бы немного), но определенно не повысится. Есть ли какое-то объяснение этому?

Во-вторых, есть ли способ проверить процесс w3p, чтобы увидеть, сколько памяти используется для чего? Одна вещь, которая приходит на ум, - это счетчики производительности, но у них не было времени проверить это.

Ответы [ 3 ]

1 голос
/ 21 июня 2009

Это всего лишь предположение с моей стороны, но если буферизировать файловый ввод / вывод, не будет ли это занимать много памяти? Возможно, более того, чем ASP-кэш, поскольку каждый файл обслуживается, требуется буфер вместо того, чтобы брать общий ресурс из кеша.

Что касается профилирования памяти, существует целый ряд программ для профилирования, которые можно использовать для анализа происходящего.

0 голосов
/ 21 июня 2009

То количество изображений в кеше заставляет его расти и расти. Поведение asp.net по умолчанию перезапускается, когда процесс обогащает 60% доступной памяти.

OutOfMemoryException может быть выброшено, когда один процесс будет переработан, а второй будет создан, но первый не будет завершен в течение длительного времени. Тогда у вас есть 2 процесса, занимающих много памяти. Если приложение занято и много запросов, то одновременно может быть более двух процессов. Это приводит к OutOfMemoryException.

Я переписал кэширование изображений, чтобы перейти к файловая система. Наш обработчик изображений сейчас проверяет изменение размера изображения в директории кеша, если такого изображения не существует, извлекает его из базы данных и сохраняет его в кеше Дир, и служит оттуда.

Это лучшее решение для этого. Файловая система кэшируется на уровне ОС.

0 голосов
/ 21 июня 2009

Вы уверены, что отключили OutputCache для этих элементов? Похоже, что вы все еще выполняете динамический код, чтобы определить, создавать ли измененный образ в случае необходимости, поэтому все еще может быть активный OutputCache

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...