Tom*_*len 15 timeout azure redis stackexchange.redis
生产环境在Azure上,使用Redis Cache Standard 2.5GB.
例1
System.Web.HttpUnhandledException(0X80004005):类型System.Web.HttpUnhandledException'引发的异常.---> StackExchange.Redis.RedisTimeoutException:超时执行SETNX User.313123,inst:49,mgr:无效,错误:从不,队列:0,qu:0,qs:0,qc:0,wr:0,wq :0,in:0,ar:0,clientName:PRD-VM-WEB-2,serverEndpoint:Unspecified/Construct3.redis.cache.windows.net:6380,keyHashSlot:15649,IOCP:(Busy = 0,Free = 1000,Min = 1,Max = 1000),WORKER :( Busy = 1,Free = 32766,Min = 1,Max = 32767)(请查看本文,了解可能导致超时的一些常见客户端问题: http://stackexchange.github.io/StackExchange.Redis/Timeouts)在StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl [T](消息消息,ResultProcessor
1 processor, ServerEndPoint server) in c:\code\StackExchange.Redis\StackExchange.Redis\StackExchange\Redis\ConnectionMultiplexer.cs:line 2120 at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor在C 1级的处理器,ServerEndPoint服务器):\代码\ StackExchange.Redis\StackExchange. Redis\StackExchange\Redis\RedisBase.cs:第81行
例2
StackExchange.Redis.RedisTimeoutException:超时执行GET ForumTopic.33831,inst:1,mgr:无效,错误:从不,队列:2,qu:0,qs:2,qc:0,wr:0,wq:0,in :0,ar:0,clientName:PRD-VM-WEB-2,serverEndpoint:Unspecified/Construct3.redis.cache.windows.net:6380,keyHashSlot:5851,IOCP:(Buzy = 0,Free = 1000,Min = 1,Max = 1000),WORKER :( Busy = 1,Free = 32766,Min = 1,Max = 32767)(请查看本文,了解一些可能导致超时的常见客户端问题: http:// stackexchange.github.io/StackExchange.Redis/Timeouts)在StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl [T](消息消息,ResultProcessor
1 processor, ServerEndPoint server) in c:\code\StackExchange.Redis\StackExchange.Redis\StackExchange\Redis\ConnectionMultiplexer.cs:line 2120 at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor在C 1级的处理器,ServerEndPoint服务器):\代码\ StackExchange.Redis\StackExchange.Redis\StackExchange\Redis的\ RedisBase.cs:在StackExchange.Redis.RedisDatabase.StringGet(RedisKey键,的commandflags标志在c)中管线81:\代码\ StackExchange.Redis\StackExchange.Redis\StackExchange\Redis的\ RedisDatabase.cs:线1647在C3. Code.Controls.Application.Caching.Distributed.Distribu tedCacheController.Get [T](String cacheKey)位于C:\ Construct.net\Source\C3Alpha2\Code\Controls\Application\Caching\Distributed\DistributedCacheController.cs:第115行,位于C3.Code.Controls.Application.Caching.Manager .Manager.Get [T](String key,Func`1 getFromExternFunction,Boolean skipLocalCaches)位于C:\ Construct.net\Source\C3Alpha2\Code\Controls\Application\Caching\Manager\Manager.cs:C3处的第159行. PageControls.Forums.TopicRender.Page_Load(对象发件人,EventArgs e)如C:\ Construct.net \源\ C3Alpha2\PageControls \论坛\ TopicRender.ascx.cs:线40在System.Web.UI.Control.OnLoad(EventArgs的e)上System.Web.UI.Control.LoadRecursive()在System.Web.UI.Control.LoadRecursive()在System.Web.UI.Control.LoadRecursive()在System.Web.UI.Control.LoadRecursive()在System.Web.UI.Control.LoadRecursive()在System.Web.UI.Control.LoadRecursive()在System.Web.UI.Control.LoadRecursive()在System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint )
这些错误是零星的,一天几次.
这是一个Azure网络短信,还是我可以减少的东西?查看错误中的数字似乎没有任何异常,并且Azure报告的服务器负载似乎永远不会超过7%.
Redis连接
internal static class RedisController
{
private static readonly object GetConnectionLock = new object();
public static ConnectionMultiplexer GetConnection()
{
if (Global.RedisConnection == null)
{
lock (GetConnectionLock)
{
if (Global.RedisConnection == null)
{
Global.RedisConnection = ConnectionMultiplexer.Connect(
Settings.Deployment.RedisConnectionString);
}
}
}
return Global.RedisConnection;
}
Run Code Online (Sandbox Code Playgroud)
最佳实践是确保您使用以下模式连接到 StackExchange Redis 客户端:
\n\nprivate static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() => {\n return ConnectionMultiplexer.Connect("cachename.redis.cache.windows.net,ssl=true,abortConnect=false,password=password");\n});\n\npublic static ConnectionMultiplexer Connection {\n get {\n return lazyConnection.Value;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如果上述方法不起作用,源 1中描述了更多调试路线,涉及区域、带宽和 NuGet 包版本等。
\n\n另一种选择是增加最小 IO 线程数。它\xe2\x80\x99s通常建议将IOCP和WORKER线程的最小配置值设置为大于默认值。对于该值应该是什么,没有一刀切的指导,因为一个应用程序的正确值对于另一应用程序来说可能太高/太低。一个好的起点是 200 或 300,然后根据需要进行测试和调整。
\n\n如何配置此设置:
\n\nminIoThreads下的配置设置<processModel>。根据 Microsoft 的说法,您可以通过编辑 web.config 来更改每个站点的此值(即使您过去可以这样做),因此您在此处选择的值是所有 .NET 的值网站会使用。请注意,如果您将 autoConfig 设置为 false,则\xe2\x80\x99 不需要添加每个属性,只需放置autoConfig="false"并覆盖该值就足够了:\n<processModel autoConfig="false" minIoThreads="250" />\n\n\n重要提示:此配置元素中指定的值是每个核心的设置。例如,如果您有一台 4 核计算机,并且希望运行时的 minIOThreads 设置为 200,则可以使用
\n<processModel minIoThreads="50"/>.
ThreadPool.SetMinThreads()添加环境变量 COMPlus_ThreadPool_ForceMinWorkerThreads 来覆盖默认的 MinThreads 设置 - 您也可以使用与上述相同的方法。有 3 种情况会导致超时,并且很难知道哪个在起作用:
| 归档时间: |
|
| 查看次数: |
3101 次 |
| 最近记录: |