我使用在开发过程中使用的MSOpenTech构建在我的Windows 10机器上安装了Redis的本地副本。我试图模拟我们从Azure Redis实例中偶尔出现的超时。我得到的一个示例错误是:
附加信息:超时执行GET 9f1cbfc9-07c3-4209-a7c4-07034d550766,inst:0,mgr:ExecuteSelect,err:never,queue:0,qu:0,qs:0,qc:0,wr:0 ,wq:0,in:0,ar:0,clientName:deployment29(504).API_IN_0,IOCP :( Busy = 1,Free = 999,Min = 8,Max = 1000),WORKER :( Busy = 4,Free = 32763,Min = 8,Max = 32767),Local-CPU:100%(请查看本文以了解可能导致超时的一些常见客户端问题:https://github.com/StackExchange/StackExchange.Redis/tree/master/Docs/Timeouts.md)
我与Redis的关系如下:
private static readonly Lazy<ConnectionMultiplexer> LazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{
var redisConfig = ConfigurationOptions.Parse(Resources.GetValueFromConfig(REDIS_CACHE_CONN_STRING));
redisConfig.SyncTimeout = 3000;
return ConnectionMultiplexer.Connect(redisConfig);
});
// As per Microsoft (http://msdn.microsoft.com/en-us/library/windowsazure/jj131262), I am
// initializing this once and reusing it.
private static ConnectionMultiplexer _dataCacheFactory
{
get
{
return LazyConnection.Value;
}
}
我的连接字符串如下所示,用于连接Azure:
<add key="RedisCacheConnString" value="xxxx.windows.net:xxxx,password=xxxxxxx=,ssl=True,abortConnect=False"/>
这是连接到本地MSOpenTech实例的时候:
<add key="RedisCacheConnString" value="localhost:6379,abortConnect=False"/>
此外,我已将50的minLoThreads添加到app.config。
在进行INFO cpu时,似乎并不是任何处理器密集型请求。这也证实,在我们的Azure Redis实例上,似乎没有任何负面的性能指标。
# CPU
used_cpu_sys:12.36
used_cpu_user:1.17
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
我应该注意到,有一个非常繁琐的前端可以同时发出多达10个ajax请求 - 几乎所有这些请求都是redis,我怀疑这可能是一个问题。我想深究为什么会发生超时。