我们昨天在 Redis 2.4 / CentOS 6.2 缓存服务器上遇到了一些奇怪的性能下降。他们每 4 分钟循环一次。
以下是主服务器 New Relic 的截图: https ://www.evernote.com/shard/s368/sh/28312f97-60a9-45ab-a27e-b31abb5c7cce/8fb69edd1206c228fcc444330f1909ec
这是同一时期的奴隶之一: https ://www.evernote.com/shard/s368/sh/802b01bc-294d-46a5-adaa-f64e2e8c8bd2/6cbe244d4570fae63ee412cd1de5a841
关于我们环境的一些信息: - 缓存:4 台带有 8 个 CPU、30GB RAM 和 600Mbps 内部网络带宽的 linux 云服务器 - Web:30 台带有 4 个 CPU 和 200Mbps 内部网络带宽的 Windows 云服务器
网络服务器似乎不是很忙,但是当出现低谷时它们确实会超时。我们不排除这可能是客户端问题,因此,他提供了有关 Web 应用程序的更多信息:
Microsoft ASP.Net MVC 3 Web 应用程序与 Redis BookSleeve Client 1.1.0.4 for Data Cache 和 AngiesList v???? (与此版本的 BookSleeve 兼容)用于会话状态。
起初,我们在与 Redis 的连接数量方面遇到了一些问题。据我了解,Redis 2.4 的连接客户端数量有限。
这就是我们将 Session 和 Data Cache 分离到一个单独的 Redis 实例中的原因。不幸的是,AngiesList 不支持多个连接,因此它只连接到主服务器。BookSleeve 客户端连接是使用 .Net 中的 System.Random 随机化的。
readonly Random _randomReadConnection = new Random((int)DateTime.Now.Ticks);
所有服务器上数据缓存的客户端连接数约为 200。会话缓存在其高峰期有大约 4100 个连接。
我们已经仔细查看了 Redis 日志,监控并运行了 iftop 和 top,但找不到任何有用的东西。
那么....为什么会出现这些下降?
我是 .Net 开发人员,不是 linux 专家。我们在 Redis/linux 领域没有任何专家......所以我们希望这里有人可以帮助我们缩小搜索范围。
作为备份计划的一部分,我们现在将客户端更新到带有兼容会话状态包的 ServiceStack Redis v3,并使用 Redis 2.8 配置服务器以确保安全。
谢谢。