Анализ использования памяти Azure Redis (дамп w3wp.exe)

Может ли кто-нибудь сказать мне, что тип поведения, описанный в дампе памяти из Visual Studio,  вывод дампа w3wp

Это нормально? например, работает ли StackExchange.Redis.PhysicalConnection так высоко при включенном размере (байтах)? Или это действительно много?

В основном мы испытываем медленную работу веб-головы после преобразования нашего кода для работы в Azure Redis из сеанса (теперь мы сериализуем и десериализуем по мере необходимости и сохраняем в кеше Redis), но общая производительность ужасна.

Запросы выполняются, но это может занять некоторое время, это связано с однопоточным характером Redis? Мы используем конфигурацию, указанную в качестве передовой практики командой Azure Redis, как указано здесь https://stackoverflow.com/a/28821220

На что еще мы можем обратить внимание, чтобы повысить производительность, поскольку текущая производительность неприемлема в качестве жизнеспособной замены нашей реализации на основе сеансов (asp.net webforms / sql server / azure IaaS), которая у нас есть.

PS - Сериализация и десериализация действительно вызывают хит, мы понимаем, что IIS испортил нас своим собственным специальным пулом памяти для несериализованных наборов данных и т. Д., Но нет никакого способа, чтобы это могло вызвать увеличение загрузки страниц на 300-500% теперь для нас.

Мысли оценил!

@ Тим Виман

Насколько велики ваши кэшированные объекты? Они могут различаться по размеру, некоторые наборы данных хранятся в redis.

Что это за типы объектов? Большинство объектов представляют собой настраиваемые объекты с переменным числом свойств, некоторые даже содержат коллекции.

Какой сериализатор вы используете? Мы используем Newtonsoft для всего, что не требует Rowstate и необходимого двоичного сериализатора для наборов данных, которым действительно требуется rowstate.

Вся сериализация и последующая десериализация выполняется в коде перед вызовом Redis баз данных StringGet или StringSet.


person mt programmer    schedule 14.03.2016    source источник
comment
Я не знаю о накладных расходах памяти, но я знаю, что сериализация / десериализация может вызвать БОЛЬШИЕ накладные расходы (сравнительно). Я видел, как это легко приводит к 10-кратному увеличению производительности. деградация только из-за [де] сериализации. Насколько легки ваши кешированные объекты? Что это за объекты? Какой сериализатор вы используете?   -  person Tim Wieman    schedule 15.03.2016
comment
В дополнение к другим вопросам я имел в виду Насколько велики ваши кешированные объекты?   -  person Tim Wieman    schedule 15.03.2016
comment
Возможно, вы захотите немного времени для сериализации / десериализации, особенно для больших объектов и при использовании двоичного сериализатора. Если это означает, что вы используете .net BinaryFormatter, что ж, это может быть ужасно медленным, особенно с большими вложенными списками. Многим людям повезло с protobuf.net как с точки зрения скорости, так и с точки зрения размера сериализованных данных.   -  person Tim Wieman    schedule 16.03.2016


Ответы (1)


Если кажется, что памяти на самом деле было очень много, мы ошибочно создавали тысячи подключений к Redis вместо одноэлементного экземпляра Redis Cache.

Множественные соединения не очищались сборщиком мусора до того, как ЦП достигнет 98%, и сервер перестал бы отвечать.

Мы скорректировали наш код, чтобы обеспечить использование одного экземпляра подключения к Azure Redis для всех вызовов Redis, и тщательно протестировали.

Кажется, проблема решена, поскольку Azure Redis больше не потребляет память или ресурсы ЦП.

person mt programmer    schedule 15.03.2016