2017-05-08 148 views
0

我在Azure的Redis的從Azure上的應用服務運行ASP.NET應用程序收到此錯誤不時進行操作與StackExchange.Redis 1.2.0.0什麼可能是使用StackExchange.Redis超時異常的原因?

Timeout performing EXISTS bookmark:afad5065-29b1-48c7-8bbc-38ddcc9ab4e4type:1, inst: 1, mgr: Inactive, err: never, queue: 3, qu: 0, qs: 3, qc: 0, wr: 0, wq: 0, in: 0, ar: 0, clientName: mywebapp, serverEndpoint: Unspecified/myapp.redis.cache.windows.net:6380, keyHashSlot: 8377, IOCP: (Busy=1,Free=999,Min=200,Max=1000), WORKER: (Busy=1,Free=32766,Min=200,Max=32767), Local-CPU: unavailable (Please take a look at this article for some common client-side issues that can cause timeouts: https://github.com/StackExchange/StackExchange.Redis/tree/master/Docs/Timeouts.md) System.TimeoutException

連接具有以下配置:allowAdmin=true,ssl=true,abortConnect=false,connectTimeout=5000,syncTimeout=2000

當時客戶端機器和Redis服務都沒有遇到高負載。 已經閱讀了關於timeouts已經但仍然不知道是什麼造成他們在我的情況。將不勝感激任何幫助。

+0

您是否查看過針對Azure Redis的Azure文檔?我會從這裏開始:https://azure.microsoft.com/en-gb/blog/investigating-timeout-exceptions-in-stackexchange-redis-for-azure-redis-cache/ –

+0

你有流量到redis的淨流量嗎?所有端口都打開?您的IP位於Redis ACL上嗎?如果配置。 – BWA

+0

@AndySinclair,是的,我已經嘗試了那篇文章中的幾條建議,但沒有成功。我覺得我錯過了這一切的一個微妙點。 – savbace

回答

1

超時可能是由client-sideserver-side性能問題造成的,因此您必須查看雙方以確定會導致您的應用程序的原因。

有些事情要考慮:

  • 當客戶端或服務器端PERF在蔚藍的門戶櫃檯看,要小心看一個相對較小的時間窗口(例如1小時)。這一點非常重要,因爲當您縮小時間窗口時,門戶網站會彙總這些值,並且這可以隱藏加載中的短時間高峯。
  • 許多性能計數器是使用採樣而不是連續監視捕獲的,因此可能會出現負載峯值沒有足夠長的時間在門戶網站上顯示。例如,如果CPU使用率每15秒記錄一次,但CPU中的峯值僅爲5秒,則可能在樣本之間發生並且不會被看到。這就是StackExchange.Redis在即將拋出超時時試圖捕獲即時CPU使用率的原因。不幸的是,有些環境不允許訪問系統性能計數器 - 因此超時錯誤中的「local-cpu:unavailable」消息。爲了解決這個問題,您可以嘗試在超時發生時捕獲進程的轉儲。轉儲通常包含轉儲發生時的CPU信息。

我編制了一個best practices列表,幫助避免Redis常見的陷阱。

如果您仍然看不到任何明確的問題,請使用Azure打開支持案例,它們將幫助您進行調查。

相關問題