我正在Windows上运行redis,我遇到了一些性能问题。该机器是带有32GM RAM的Xeon E5和带有Windows Server 2012的HW-Raid的SSD。还有一些其他进程在运行,但它们并不重要,大部分时间都处于空闲状态。
我经常注意到性能问题和操作超时,所以我开始“redis-cli --intrinsic-latency 100”。输出显示最大延迟达到15000微秒,我认为这非常慢。
我还在运行内存分析器:r / w性能不太好(5GB /秒)但我认为这不应该是瓶颈。目前我绝对不知道该尝试什么。
你能告诉我一些如何找到性能问题吗?
答案 0 :(得分:5)
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客户端是否在同一台硬件计算机上?
答案 1 :(得分:4)
我一直在使用名为“Memurai”的 Redis 的 Windows 端口。他们有免费的开发者版本。
现在,在他们博客的 one 中,他们声称他们已经解决了 fork() 问题。请参阅下面的摘录。
Memurai 的性能对我来说似乎很好,即使启用了持久性(RDB 和 AOF),尽管我自己没有运行任何特定的测试。 here 中有另一个关于 Memurai perf 的博客。
值得一试。
“在内部,Redis 使用 fork() 系统调用来执行异步写入,但这不是 Memurai 的选项,因为 Windows 上不存在 fork()。相反,Memurai 使用 Windows 共享内存来实现最先进的 fork() 版本,针对性能和...进行了微调..."