Azure Redis内存使用情况(w3wp.exe转储)洞察

时间:2016-03-14 19:50:18

标签: performance azure stackexchange.redis memory-efficient azure-redis-cache

任何人都可以告诉我Visual Studio w3wp dump output

中的内存转储中列出的行为类型

是正常的吗?例如,StackExchange.Redis.PhysicalConnection是否在包含大小(字节)上运行高?或者这真的很高?

基本上,在将我们的代码转换为在Session上运行Azure Redis之后,我们的网络头脑经历了缓慢(我们现在正在根据需要进行序列化和反序列化并存储在Redis缓存中)但整体性能非常糟糕。

请求已完成但可能需要一段时间,是否由于Redis的单线程特性?我们使用Azure Redis团队最佳做法概述的配置,如https://stackoverflow.com/a/28821220

所述

我们还有什么可以帮助提高性能,因为当前的性能不可接受,因为它们是我们目前基于会话的实现(asp.net webforms / sql server / azure IaaS)的可行替代品。

PS - 序列化和反序列化确实引起了轰动,我们理解IIS使用自己的特殊内存池来破坏我们的非序列化数据集等等,但它没有办法导致页面增加300-500%像现在这样的载荷现在适合我们。

赞赏的想法!

@Tim Wieman

您的缓存对象有多大? 它们的大小可以在范围内,有些数据集存储在redis中。

他们是什么类型的对象? 大多数对象都是具有可变数量属性的自定义对象,有些甚至包含集合。

您使用的是什么序列化程序? 我们将Newtonsoft用于任何不需要Rowstate的东西,以及需要rowstate的数据集所需的二进制序列化器。

所有序列化和后续反序列化都是在调用redis数据库StringGet或StringSet之前在代码中完成的。

1 个答案:

答案 0 :(得分:1)

如果出现内存实际上非常高,我们错误地创建了数千个与Redis的连接,而不是Redis Cache的单个实例。

在CPU达到98%并且服务器没有响应之前,GC没有清理多个连接。

我们调整了代码,以确保Azure Redis连接的单个实例用于所有Redis调用,并且已经过彻底测试。

似乎已解决,因为Azure Redis不再占用内存或CPU资源。