超出了Redis连接/缓冲区大小限制

时间:2013-01-17 07:03:28

标签: redis

在对我们的应用程序服务器进行压力测试时,我们从Redis得到以下例外:

  

ServiceStack.Redis.RedisException:无法连接到redis-host上的redis实例:6379 ---> System.Net.Sockets.SocketException:无法执行套接字上的操作,因为系统缺少足够的缓冲区空间或因为队列已满Redis-host:6379       在System.Net.Sockets.Socket.Connect(IPAddress []地址,Int32端口)       在System.Net.Sockets.Socket.Connect(String host,Int32 port)       在ServiceStack.Redis.RedisNativeClient.Connect()       ---内部异常堆栈跟踪结束---       在ServiceStack.Redis.RedisNativeClient.Connect()       在ServiceStack.Redis.RedisNativeClient.AssertConnectedSocket()       at ServiceStack.Redis.RedisNativeClient.SendCommand(Byte [] [] cmdWithBinaryArgs)       at ServiceStack.Redis.RedisNativeClient.SendExpectData(Byte [] [] cmdWithBinaryArgs)       at ServiceStack.Redis.RedisClient.GetValueFromHash(String hashId,String key)       at ServiceStack.Redis.Generic.RedisTypedClient 1.GetValueFromHash[TKey](IRedisHash 2 hash,TKey key)

似乎在redis主机端口上有连接限制超过。知道如何通过Redis.conf或服务器配置提高此阈值吗?我们在Ubuntu服务器上托管了Redis实例。

1 个答案:

答案 0 :(得分:1)

我能够使用ServiceStack复制相同的缓冲区大小限制问题。进行压力测试的代码在这里 - 运行20个应用程序实例至少20分钟。 https://github.com/ServiceStack/ServiceStack.Redis/commit/b01582f9c873f375794c04d46aad400590ca5bf3

您可能会看到的第一个错误是“无法连接到redis实例”,如下所述 Redis unable to connect in busy load,但如果扩展内部异常,则会看到“由于系统缺少足够的缓冲区空间或队列已满,无法执行对套接字的操作”

我的问题出现在Window7上,但不是Window Server 2008 rc。所以我开始看看它是否是操作系统问题。在ServiceStack上通过电子邮件发送Demis后,得出的结论是ServiceStack正在正确关闭套接字。查看操作系统,通过设置TcpTimeWaitDelay和MaxUserPort修复了问题。

更多参考资料。 TcpTimeWaitDelay到45秒

和MaxUserPort http://mashijie.blogspot.com/2009/05/change-default-setting-of-tcp-ports.html

我将端口范围调整为1025-64511

相关问题