Redis在Windows下的性能问题

4
我正在Windows上运行redis,遇到了一些性能问题。机器是一台拥有32GM RAM和SSD硬盘的Xeon E5服务器,还运行着其他一些进程,但它们大部分时间都处于空闲状态,不是关键进程。
我注意到性能问题和操作超时非常频繁,所以我开始使用"redis-cli --intrinsic-latency 100"。输出显示最大延迟高达15000微秒,我认为这非常慢。
我还运行了一个内存分析器:读/写性能不是很好(5GB / sec),但我认为这不应该是瓶颈。目前我完全不知道该尝试什么。
你能给我一些提示如何找到性能问题吗?
2个回答

5
在Windows中,不存在像Linux中的“fork”概念。因此,当你转储redis数据库时,它会停止一切以便将“dump.rdb”写入磁盘。不过,他们实现了“Copy-on-write”策略,不会停止redis,只有在转储时才复制值(redis客户端仍可从redis获取响应)。这在他们的版本日志中有说明:https://github.com/MSOpenTech/Redis

Windows中没有UNIX fork() API的替代方法可模拟使用内存映射文件的写时复制行为。

这是redis在Windows中的真正瓶颈,因为它增加了开销并且更为复杂(存在bug?)。这里有解释: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客户端是否在同一台硬件机器上?


非常感谢,我会更深入地探索这个方向。 - SebastianStehle

4

我一直在使用Windows版Redis的端口"Memurai"。他们提供了一个免费的开发者版本。

现在,在他们的博客中,其中之一,他们声称已经解决了fork()问题。请参见下面的摘录。

对我来说,即使启用持久性(RDB和AOF),Memurai的性能也很好,尽管我自己没有运行任何特定的测试。关于Memurai Perf还有另一篇博客在这里

值得一试。

"在内部,Redis使用fork()系统调用执行异步写入,但这对于Windows不是一个选项,因为fork()不存在于Windows上。相反,Memurai使用Windows共享内存实现了一种精心调整以获得最佳性能的fork()版本..."


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接