Redis Windows,性能问题
Posted
技术标签:
【中文标题】Redis Windows,性能问题【英文标题】:Redis Windows, Performance Issues 【发布时间】:2014-08-19 11:54:05 【问题描述】:我在 Windows 上运行 redis,但遇到了一些性能问题。该机器是具有 32GM RAM 和 SSD 的 Xeon E5,具有 HW-Raid 和 Windows Server 2012。还有一些其他进程正在运行,但它们并不重要,并且大部分时间都处于空闲状态。
我经常注意到性能问题和操作超时,所以我启动了“redis-cli --intrinsic-latency 100”。输出显示最大延迟达到 15000 微秒,我认为这非常慢。
我还在运行内存分析器:读/写性能不是很好(5GB/秒),但我认为这不应该是瓶颈。目前我完全不知道该尝试什么。
你能给我一些提示如何找到性能问题吗?
【问题讨论】:
【参考方案1】:Windows 中没有 Linux 中的“fork”。因此,当您转储您的 redis 数据库时,它可以“停止世界”以便在磁盘上写入“dump.rdb”。好吧,他们确实实施了一种“写时复制”策略,它不会停止 redis,它只是在转储时复制值(redis 客户端仍然能够从 redis 获得响应)。在他们的版本日志中:https://github.com/MSOpenTech/Redis
UNIX fork() API 有一个替代品,它使用内存映射文件模拟写时复制行为。
这是 Windows 中 redis 的真正瓶颈,因为它是开销并且更复杂(错误?)。这里解释一下:http://blogs.msdn.com/b/interoperability/archive/2012/04/26/here-s-to-the-first-release-from-ms-open-tech-redis-on-windows.aspx
因此,您可以尝试在 Linux 上运行 redis 来测试这是否是 windows 端口的性能问题。此外,您编写的 dump.rdb 越多,开销就越大(您可以更改频率或尝试完全禁用它以进行测试)。
最后,它也可能是网络问题,您应该检查它是否不是网络规则/硬件问题(吞吐量不足!电缆或其他东西坏了,防火墙...)。您的 redis 客户端是否在同一台硬件机器上?
【讨论】:
非常感谢,我会朝这个方向深入研究。【参考方案2】:我一直在使用名为“Memurai”的 Redis 的 Windows 端口。他们有免费的开发者版本。
现在,在他们博客的one 中,他们声称他们已经解决了 fork() 问题。请参阅下面的摘录。
Memurai 性能对我来说似乎不错,即使启用了持久性(RDB 和 AOF),尽管我自己没有运行任何特定的测试。 here 有另一个关于 Memurai perf 的博客。
值得一试。
“在内部,Redis 使用 fork() 系统调用来执行异步写入,但这不是 Memurai 的选项,因为 fork() 在 Windows 上不存在。相反,Memurai 使用 Windows 共享内存来实现fork() 的最先进版本,针对性能和...进行了微调"
【讨论】:
以上是关于Redis Windows,性能问题的主要内容,如果未能解决你的问题,请参考以下文章