Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Redis Windows,性能问题_Performance_Redis - Fatal编程技术网

Performance Redis Windows,性能问题

Performance Redis Windows,性能问题,performance,redis,Performance,Redis,我在windows上运行redis,我遇到了一些性能问题。这台机器是一台Xeon E5,带有32GM RAM和SSD,带有硬件Raid和Windows Server 2012。还有一些其他进程正在运行,但它们不是关键的,并且大部分时间处于空闲状态 我经常注意到性能问题和操作超时,所以我启动了“redis cli——固有延迟100”。输出显示最大延迟达到15000微秒,我认为这是非常慢的 我还运行了一个内存分析器:r/w性能不是很好(5GB/秒),但我认为这不应该是瓶颈。目前我完全不知道该尝试什么

我在windows上运行redis,我遇到了一些性能问题。这台机器是一台Xeon E5,带有32GM RAM和SSD,带有硬件Raid和Windows Server 2012。还有一些其他进程正在运行,但它们不是关键的,并且大部分时间处于空闲状态

我经常注意到性能问题和操作超时,所以我启动了“redis cli——固有延迟100”。输出显示最大延迟达到15000微秒,我认为这是非常慢的

我还运行了一个内存分析器:r/w性能不是很好(5GB/秒),但我认为这不应该是瓶颈。目前我完全不知道该尝试什么

你能告诉我一些如何发现性能问题的技巧吗?

Windows中的Linux没有“fork”。因此,当您转储redis db时,它可以“停止世界”,以便在磁盘上写入“dump.rdb”。他们确实实施了一种“写时拷贝”策略,这种策略不会阻止redis,只是在转储时拷贝值(redis客户端仍然能够从redis获得响应)。在他们的版本日志中:

UNIX fork()API有一个替代品,它使用内存映射文件模拟写时复制行为

这是windows中redis的真正瓶颈,因为它是一种开销,而且更复杂(bug?)。这里解释如下:

因此,您可以尝试在Linux上运行redis,以测试这是否是windows端口的性能问题。此外,您编写dump.rdb的次数越多,开销就越大(您可以更改频率或尝试完全禁用它以进行测试)


最后,它也可能是一个网络问题,您应该检查它是否不是一个网络规则/硬件问题(吞吐量不足!坏电缆或东西,防火墙…)。您的redis客户端是否在同一台硬件机器上?

我一直在使用一个名为“Memurai”的redis Windows端口。他们有一个免费的开发者版

现在,在他们的博客中,他们声称他们已经解决了fork()问题。见下文摘录

Memurai性能对我来说似乎很好,即使启用了持久性(RDB和AOF),尽管我自己没有运行任何特定的测试。还有一个关于Memurai perf in的博客

值得一试


“在内部,Redis使用fork()系统调用来执行异步写入,但这不是Memurai的选项,因为Windows上不存在fork()。相反,Memurai使用Windows共享内存来实现一个最新版本的fork(),该版本的性能和…”

非常感谢,我将朝这个方向深入潜水。