2

谁能告诉我 Visual Studio 的内存转储中概述的行为类型w3wp 转储输出

是正常的?例如 StackExchange.Redis.PhysicalConnection 在包含大小(字节)上运行得那么高吗?还是真的很高?

基本上,在将我们的代码从 Session 转换为在 Azure Redis 上运行之后,我们的 Web Head 遇到了缓慢的问题(我们现在根据需要进行序列化和反序列化并存储在 Redis 缓存中),但整体性能很糟糕。

请求完成但可能需要一段时间,这是由于 Redis 的单线程性质吗?我们正在使用 Azure Redis 团队概述的配置作为最佳实践,如此处所述https://stackoverflow.com/a/28821220

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

PS - 序列化和反序列化确实会造成打击,我们知道 IIS 用它自己的用于非序列化数据集等的特殊内存池破坏了我们,但它不可能导致像它这样的页面加载增加 300-500%现在是给我们的。

想法赞赏!

@蒂姆·威曼

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

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

你用的是什么序列化器? 我们将 Newtonsoft 用于不需要 Rowstate 的任何内容,并将所需的二进制序列化程序用于需要行状态的数据集。

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

4

1 回答 1

1

如果看起来内存实际上非常高,那么我们错误地创建了数千个到 Redis 的连接,而不是 Redis 缓存的单例实例。

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

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

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

于 2016-03-15T21:15:26.217 回答