Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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
C# 如何在Azure redis缓存中修复此超时异常?_C#_Asp.net_Azure_Redis_Kentico - Fatal编程技术网

C# 如何在Azure redis缓存中修复此超时异常?

C# 如何在Azure redis缓存中修复此超时异常?,c#,asp.net,azure,redis,kentico,C#,Asp.net,Azure,Redis,Kentico,我们有一个web应用程序,它使用Microsoft.web.Redis.RedisessionStateProvider作为会话状态提供程序。直到最近,当应用程序突然报告大量异常时,我们才发现这个问题,如下所述 该消息表示某种超时。但我不知道如何解决这个问题。该应用程序是Kentico CMS的一个实例,我们没有以任何方式自定义其会话缓存机制 主要例外情况: 信息: 引发了类型为“System.Web.HttpException”的异常 堆栈跟踪: at System.Web.HttpAsync

我们有一个web应用程序,它使用Microsoft.web.Redis.RedisessionStateProvider作为会话状态提供程序。直到最近,当应用程序突然报告大量异常时,我们才发现这个问题,如下所述

该消息表示某种超时。但我不知道如何解决这个问题。该应用程序是Kentico CMS的一个实例,我们没有以任何方式自定义其会话缓存机制

主要例外情况:

信息:

引发了类型为“System.Web.HttpException”的异常

堆栈跟踪:

at System.Web.HttpAsyncResult.End() 
at System.Web.HttpApplication.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult ar) 
at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\ConnectionMultiplexer.cs:line 1927 
at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\RedisBase.cs:line 80 
at StackExchange.Redis.RedisDatabase.ScriptEvaluate(String script, RedisKey[] keys, RedisValue[] values, CommandFlags flags) in c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\RedisDatabase.cs:line 866 
at Microsoft.Web.Redis.StackExchangeClientConnection.<>c__DisplayClass4.<Eval>b__3() in d:\TeamCityBuildAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.cs:line 113 
at Microsoft.Web.Redis.StackExchangeClientConnection.RetryForScriptNotFound(Func`1 redisOperation) in d:\TeamCityBuildAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.cs:line 129 
at Microsoft.Web.Redis.StackExchangeClientConnection.RetryLogic(Func`1 redisOperation) in d:\TeamCityBuildAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.cs:line 155 
at Microsoft.Web.Redis.StackExchangeClientConnection.Eval(String script, String[] keyArgs, Object[] valueArgs) in d:\TeamCityBuildAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.cs:line 113 
at Microsoft.Web.Redis.RedisConnectionWrapper.TryTakeWriteLockAndGetData(DateTime lockTime, Int32 lockTimeout, Object& lockId, ISessionStateItemCollection& data, Int32& sessionTimeout) in d:\TeamCityBuildAgent\work\f55792526e6d9089\src\RedisSessionStateProvider\RedisConnectionWrapper.cs:line 182 
at Microsoft.Web.Redis.RedisSessionStateProvider.GetItemFromSessionStore(Boolean isWriteLockRequired, HttpContext context, String id, Boolean& locked, TimeSpan& lockAge, Object& lockId, SessionStateActions& actions) in d:\TeamCityBuildAgent\work\f55792526e6d9089\src\RedisSessionStateProvider\RedisSessionStateProvider.cs:line 272 
at Microsoft.Web.Redis.RedisSessionStateProvider.GetItemExclusive(HttpContext context, String id, Boolean& locked, TimeSpan& lockAge, Object& lockId, SessionStateActions& actions) in d:\TeamCityBuildAgent\work\f55792526e6d9089\src\RedisSessionStateProvider\RedisSessionStateProvider.cs:line 190 
at System.Web.SessionState.SessionStateModule.GetSessionStateItem() 
at System.Web.SessionState.SessionStateModule.PollLockedSessionCallback(Object state) 
内部异常:

信息:

执行评估的超时,inst:1,mgr:Inactive,err:never,queue:0,qs:0,qc:0,wr:0,wq:0,in:0,ar:0,IOCP:(Busy=0,Free=1000,Min=2,Max=1000),WORKER:(Busy=3,Free=32764,Min=2,Max=32767),clientName:KSCOMAZUATWEB2

堆栈跟踪:

at System.Web.HttpAsyncResult.End() 
at System.Web.HttpApplication.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult ar) 
at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\ConnectionMultiplexer.cs:line 1927 
at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\RedisBase.cs:line 80 
at StackExchange.Redis.RedisDatabase.ScriptEvaluate(String script, RedisKey[] keys, RedisValue[] values, CommandFlags flags) in c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\RedisDatabase.cs:line 866 
at Microsoft.Web.Redis.StackExchangeClientConnection.<>c__DisplayClass4.<Eval>b__3() in d:\TeamCityBuildAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.cs:line 113 
at Microsoft.Web.Redis.StackExchangeClientConnection.RetryForScriptNotFound(Func`1 redisOperation) in d:\TeamCityBuildAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.cs:line 129 
at Microsoft.Web.Redis.StackExchangeClientConnection.RetryLogic(Func`1 redisOperation) in d:\TeamCityBuildAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.cs:line 155 
at Microsoft.Web.Redis.StackExchangeClientConnection.Eval(String script, String[] keyArgs, Object[] valueArgs) in d:\TeamCityBuildAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.cs:line 113 
at Microsoft.Web.Redis.RedisConnectionWrapper.TryTakeWriteLockAndGetData(DateTime lockTime, Int32 lockTimeout, Object& lockId, ISessionStateItemCollection& data, Int32& sessionTimeout) in d:\TeamCityBuildAgent\work\f55792526e6d9089\src\RedisSessionStateProvider\RedisConnectionWrapper.cs:line 182 
at Microsoft.Web.Redis.RedisSessionStateProvider.GetItemFromSessionStore(Boolean isWriteLockRequired, HttpContext context, String id, Boolean& locked, TimeSpan& lockAge, Object& lockId, SessionStateActions& actions) in d:\TeamCityBuildAgent\work\f55792526e6d9089\src\RedisSessionStateProvider\RedisSessionStateProvider.cs:line 272 
at Microsoft.Web.Redis.RedisSessionStateProvider.GetItemExclusive(HttpContext context, String id, Boolean& locked, TimeSpan& lockAge, Object& lockId, SessionStateActions& actions) in d:\TeamCityBuildAgent\work\f55792526e6d9089\src\RedisSessionStateProvider\RedisSessionStateProvider.cs:line 190 
at System.Web.SessionState.SessionStateModule.GetSessionStateItem() 
at System.Web.SessionState.SessionStateModule.PollLockedSessionCallback(Object state) 
在c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\ConnectionMultiplexer.cs中的StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](消息,结果处理器'1处理器,服务器端点服务器):第1927行
在c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\RedisBase.cs中的StackExchange.RedisBase.ExecuteSync[T](消息消息,ResultProcessor`1处理器,ServerEndPoint服务器):第80行
在c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\Redis\RedisDatabase.ScriptEvaluate(字符串脚本、RedisKey[]键、RedisValue[]值、CommandFlags标志)中
在Microsoft.Web.Redis.StackExchangeClientConnection.c__中,在d:\TeamCityBuildAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.cs中显示Class4.b__3()
在d:\TeamCityBuilderAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.RetryForScriptNotFound(Func`1 redisOperation)中的Microsoft.Web.Redis.StackExchangeClientConnection.RetryForScriptNotConnection(Func`1 redisOperation)处:第129行
在d:\TeamCityBuildAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.RetryLogic中的Microsoft.Web.Redis.StackExchangeClientConnection.RetryLogic(Func`1 redisOperation)中:第155行
在d:\TeamCityBuildAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.Eval(字符串脚本,字符串[]键参数,对象[]值参数)中的Microsoft.Web.Redis.StackExchangeClientConnection.Eval(字符串脚本,字符串[]键参数,对象[]值参数):第113行
在d:\TeamCityBuildAgent\work\f55792526e6d9089\src\RedisSessionStateProvider\RedisConnectionWrapper.cs中的Microsoft.Web.Redis.RedisConnectionWrapper.TryTakeWriteLockAndGetData(日期时间锁定时间、Int32锁定超时、对象和锁定ID、ISessionStateItemCollection和数据、Int32和sessionTimeout)中
位于d:\TeamCityBuildAgent\work\f55792526e6d9089\src\RedisessionStateProvider\RedisessionStateProvider.cs第272行中的Microsoft.Web.Redis.Redis.RedisessionStateProvider.GetItemFromSessionStore(布尔值为WriteLockRequired,HttpContext上下文,字符串id,布尔值和锁定值,时间跨度和锁定值,对象和锁定值,SessionStateActions和操作)
位于d:\TeamCityBuildAgent\work\f55792526e6d9089\src\RedisessionStateProvider\RedisessionStateProvider.cs第190行中的Microsoft.Web.Redis.Redis.RedisessionStateProvider.GetItemExclusive(HttpContext上下文、字符串id、布尔值和锁定、TimeSpan和锁定、对象和锁定id、SessionStateActions和操作)
位于System.Web.SessionState.SessionStateModule.GetSessionStateItem()处
位于System.Web.SessionState.SessionStateModule.PollLockedSessionCallback(对象状态)

我刚刚在一个客户端网站上完成了这项工作,帮助我将其添加到您的提供商的连接字符串中:

throwOnError=“true”retrytimeoutinems=“500”

我学到的是,有时会出现延迟问题,如果解决速度不够快,默认情况下只能“退出”。因此,添加此选项允许它继续重试

您的字符串可能看起来像这样

<add name="MySessionStateStore" throwOnError="true" retryTimeoutInMilliseconds="500" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="mysite-prod.redis.cache.windows.net" accessKey="mykey" ssl="true" />

在遇到同样的问题并阅读了关于设置最小和最大线程值等的各种帖子后,发现问题出在订阅层上

C1基本层(35英镑/百万英镑)拥有1gb缓存、1000个并发连接,与C1标准层(95英镑/百万英镑)的标题数字完全相同。 这是一个自然的假设,当您只需要几MB的缓存,并且在任何时候只有50个并发会话处于活动状态时,C!基本的就足够了,如果不是过度的话

不同之处似乎在于,如果你的网站上有10个或更少的并发用户,那么C1基本功能是有效的。
平心而论,文章中提到basic仅适用于开发和测试环境。

太棒了,谢谢Brenden。我会尝试一下,然后再给你回复。遗憾的是,这种情况仍然存在:(我一直在读这篇文章,这促使我调查我们web服务器上的CPU使用情况。看起来它间歇性地达到100%(我必须单独调查)但这些峰值可能与redis错误相关,所以现在我假设这是另一个问题的副作用。还可以看看缓存。如果您的站点仍然缓存在Kentico和/或redis中,您可能需要清除它才能看到更改。在redis控制台中运行
FLUSHDB
以清除会话缓存。它你的智能搜索也可能有问题。请查看我的帖子:我们有C1标准。活动会话为9-10。仍然不断超时。这很烦人。所有解决方案都不起作用。