2

谁能告诉我,如果行为的类型,从Visual Studio中的内存转储w3wp dump outputAzure的Redis的内存使用量(w3wp.exe的转储)洞察

是正常的概括?例如StackExchange.Redis.PhysicalConnection在包容性大小(字节)上运行那么高?或者这真的很高?

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

请求已完成,但可能需要一段时间,是由于Redis的单线程性质?我们使用概括为通过Azure的Redis的球队最佳实践配置如下所列https://stackoverflow.com/a/28821220

我们可以看看还有什么的,以帮助提高性能,因为目前的表现并不像一个可行的替代我们的基于会话的实现可以接受的(我们现在有asp.net webforms/sql server/azure IaaS)。我们知道IIS使用它自己的专用内存池为非序列化数据集等等带来了麻烦,但是它不会导致300-500%的增加页面加载就像现在对我们来说一样。

想法感激!

@Tim威曼

如何大的是你的缓存的对象? 它们的大小可以不等,有一些数据集存储在redis中。

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

你在使用什么串行器? 对于任何不需要Rowstate和需要rowstate的数据集所需的二进制序列化程序,我们都使用Newtonsoft。

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

+0

我不知道内存开销,但我知道序列化/反序列化会导致很多开销(比较)。我已经看到它很容易导致10倍的性能。仅仅由于[de]序列化而退化。你的缓存对象有多少?他们是什么类型的对象?你在使用什么串行器? –

+0

除了其他问题,我的意思是“你的缓存对象有多大?”? –

+0

您可能想要对序列化/反序列化进行一些计时,特别是在大型对象和使用“二进制序列化器”时。如果这意味着您使用的是.net BinaryFormatter,那么它可能会非常慢,特别是对于大型嵌套列表。很多人对protobuf.net都有很好的运行速度和序列化数据的大小。 –

回答

1

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

在CPU达到98%并且服务器无响应之前,多个连接未被GC清除。

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

由于Azure Redis不再耗尽内存或CPU资源,因此它似乎得到了解决。