簡體   English   中英

Redis偶爾掛起

[英]Redis occasional hangs

我們在服務器上運行的Windows節點有一個獨立的Redis(2.8.2104)。

另外兩個服務器正在與此實例通信。

我們將其與SignalR一起使用並進行緩存。 轉儲的大小約為700MB

有時我們會掛1-3分鍾。 此后,它會自行恢復。

該錯誤似乎僅在我們的頁面上有流量時才會發生。

這一次我們得到了異常,您可以在下面看到

StackExchange.Redis.RedisConnectionException:System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務任務)在EVAL上的SocketFailure在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務任務)在Microsoft.Owin.Cors.CorsMNextved。 )---從上一個引發異常的位置開始的堆棧跟蹤---在Microsoft.Owin的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任務)處的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務任務) .Mapping.MapMiddleware.d__0.MoveNext()---從上一個引發異常的位置開始的堆棧跟蹤---位於System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務任務)

當我搜索Redis日志時,偶爾會發現以下錯誤:

[33144] 18 Feb 18:18:44.843#

=== REDIS BUG報告開始:從此處剪切並粘貼=== [33144] 18 Feb 18:18:44.844#內存不足,分配308457字節。 [33144] 18 Feb 18:18:44.844#---中止[33144] 18 Feb 18:18:44.844#---堆棧跟蹤redis-server.exe!LogStackTrace(c:\\ release \\ redis \\ src \\ win32_interop \\ win32_stacktrace.cpp:95)(0x00000016,0x042E0028,0x00000000,0x00000001)redis-server.exe!AbortHandler(c:\\ release \\ redis \\ src \\ win32_interop \\ win32_stacktrace.cpp:206)(0x00000001,0x89EE7767,0x40150880ED,0xBB7is -server.exe!raise(f:\\ dd \\ vctools \\ crt \\ crtw32 \\ misc \\ winsig.c:587)(0x00000001,0x00000000,0x0004B4E9,0x042E0028)redis-server.exe!abort(f:\\ dd \\ vctools \\ crt \\ crtw32 \\ misc \\ abort.c:82)(0x00000001,0x4013F888,0x0004B4E9,0x00008000)redis-server.exe!redisOutOfMemoryHandler(c:\\ release \\ redis \\ src \\ redis.c:3397)(0x0004B4E9,0x4007DA28,0x042 ,0x4007A27B)redis-server.exe!zmalloc(c:\\ release \\ redis \\ src \\ zmalloc.c:147)(0xBDF01150、0x4007EB2C,0xBDF01150、0x446D6B10)redis-server.exe!sdsnewlen(c:\\ release \\ redis \\ src \\ sds.c:59)(0xBDF01150、0xBDF01150、0x3E74FD95、0x00000003)redis-server.exe!_addReplyStringToList(c:\\ release \\ redis \\ src \\ networkin gc:271)(0xBDF01150、0xBDF01150、0x042E0028、0x400E34FE)redis-server.exe!addReplyBulkCBuffer(c:\\ release \\ redis \\ src \\ networking.c:517​​)(0xFFFFFFFF,0x042E0028、0x01B77260、0x01B77260.exe) luaReplyToRedisReply(c:\\ release \\ redis \\ src \\ scripting.c:792)(0x00000004、0xBDF01150、0x00000002、0x00000002)redis-server.exe!luaReplyToRedisReply(c:\\ release \\ redis \\ src \\ scripting.c:839) (0xFFFFFFFF,0x00A7F690、0x67897B20、0xBDF01150)redis-server.exe!evalGenericCommand(c:\\ release \\ redis \\ src \\ scripting.c:1048)(0x71E66870、0x00000000、0x00000001、0x000000B2)redis-server.exe!調用(c :\\ release \\ redis \\ src \\ redis.c:2016)(0x56C60B04、0x4008B000、0x00000000、0x000000B2)redis-server.exe!processCommand(c:\\ release \\ redis \\ src \\ redis.c:2235)(0xBDF01150,0x000000B2 ,0x000023B5,0x00000001)redis-server.exe!processInputBuffer(c:\\ release \\ redis \\ src \\ networking.c:1274)(0xBDF01150,0x00000000,0x00000000,0x00000001)redis-server.exe!readQueryFromClient(c:\\ release \\ redis \\ src \\ networking.c:1329)(0xFFE51650、0x00000001、0x4 4726F20,0x0000012C)redis-server.exe!aeMain(c:\\ release \\ redis \\ src \\ ae.c:487)(0x56C5C7F8,0x00000002,0x00000000,0x00000002)redis-server.exe!redis_main(c:\\ release \\ redis \\ src \\ redis.c:3524)(0x0024BA50,0x00000002,0x56C5C7EB,0x00000002)redis-server.exe!main(c:\\ release \\ redis \\ src \\ win32_interop \\ win32_qfork.cpp:1363)(0x00000016,0xFFFFFFFF,0x00000016, 0x0023F3A0)redis-server.exe!ServiceWorkerThread(c:\\ release \\ redis \\ src \\ win32_interop \\ win32_service.cpp:485)(0x4000B3D0,0x00000000,0x00000000,0x00000000)KERNEL32.DLL!BaseThreadInitThunk(c:\\ release \\ redis \\ src \\ win32_interop \\ win32_service.cpp:485)(0xBB0113B0,0x00000000,0x00000000,0x00000000)ntdll.dll!RtlUserThreadStart(c:\\ release \\ redis \\ src \\ win32_interop \\ win32_service.cpp:485)(0x00000000,0x00000000,0x00000000,0x00000000,0 ntdll.dll!RtlUserThreadStart(c:\\ release \\ redis \\ src \\ win32_interop \\ win32_service.cpp:485)(0x00000000、0x00000000、0x00000000、0x00000000)[33144] 18 Feb 18:18:44.857#=== REDIS BUG報告結束。 確保包括從START到END。 ===

maxheap設置為3000mb,服務器總共有64 GB RAM,大約有10GB可用

還有另外一件事,但是我不確定是否真的解決了這個問題。

在大多數情況下,問題的發生頻率會增加。 然后,當我重置其中一台服務器的iis時,問題就消失了好幾個小時或幾天。 我考慮過可能會掛起/堆疊signalR隊列。 但我沒有其他跡象表明可能是這種情況。

有什么暗示嗎?

我發現解決方案與signalR本身無關,但正在使用客戶端signal Scaleout。

我得出的結論是,如果您使用的是默認Microsoft.AspNet.SignalR.Redis程序包,則該程序包包括對舊StackExchange.Redis客戶端的私有引用。

該客戶端在釋放客戶端連接句柄時遇到問題。 現在,當重新啟動IIS或Redis服務器時,將釋放所有這些句柄,並且所有內容將再次運行。

一種解決方案是構建自己的signalR Scaleout流實現

另一個(對我們來說更容易)是僅禁用signalR橫向擴展流。

所有其他訪問redis的組件都在使用ServiceStack.Redis,它工作正常。

現在大約一個月后,我們的Redis服務器不再出現任何問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM