Что может быть причиной исключения тайм-аута при использовании StackExchange.Redis?

Время от времени я получаю эту ошибку при выполнении операций с StackExchange.Redis 1.2.0.0 в Azure Redis из приложения ASP.NET, работающего в службе приложений Azure:

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 в это время не испытывают высокой нагрузки. Вы уже читали об тайм-аутах, но до сих пор не знаете чем они вызваны в моем случае. Был бы признателен за любую помощь.


person savbace    schedule 08.05.2017    source источник
comment
Вы смотрели документацию Azure специально для Azure Redis? Я бы начал здесь: azure.microsoft.com/en-gb/blog/   -  person Andy Sinclair    schedule 08.05.2017
comment
Есть ли у вас чистый трафик на Redis? Все порты открыты? Ваш IP-адрес в Redis ACL? Если настроено.   -  person BWA    schedule 08.05.2017
comment
@AndySinclair, да, я уже попробовал несколько рекомендаций из этой статьи, но безуспешно. Я чувствую, что упускаю какой-то тонкий момент во всем этом.   -  person savbace    schedule 08.05.2017


Ответы (1)


Тайм-ауты могут быть вызваны на стороне клиента или проблемы с производительностью на стороне сервера, поэтому вам нужно смотреть на обе стороны, чтобы определите, что будет причиной этого для вашего приложения.

Некоторые вещи, которые следует учитывать:

  • При просмотре счетчиков производительности на стороне клиента или сервера на портале Azure будьте внимательны и смотрите на относительно небольшое временное окно (например, 1 час). Это важно, потому что портал агрегирует значения при уменьшении масштаба до более длительных окон времени, и это может скрыть кратковременные всплески нагрузки.
  • Многие счетчики производительности фиксируются с помощью выборки, а не непрерывного мониторинга, поэтому всплеск нагрузки может быть недостаточно длительным, чтобы отобразиться на портале. Например, если загрузка ЦП регистрируется каждые 15 секунд, но всплеск загрузки ЦП длится всего 5 секунд, это может произойти между выборками и не будет видно. Вот почему StackExchange.Redis пытается зафиксировать мгновенную загрузку ЦП, когда он вот-вот истечет тайм-аут. К сожалению, некоторые среды запрещают доступ к счетчикам производительности системы, поэтому сообщение «local-cpu: недоступен» в ошибке тайм-аута. Чтобы противостоять этому, вы можете попытаться захватить дамп вашего процесса, когда происходит тайм-аут. Дамп обычно содержит информацию о ЦП на момент создания дампа.

Я составил список рекомендаций, которые помогают избежать распространенных ошибок в Redis.

Если вы по-прежнему не видите каких-либо четких указаний на проблему, откройте запрос в службу поддержки Azure, и они помогут вам разобраться.

person JonCole    schedule 08.05.2017