問題描述
Azure Redis在使用的過程中痴晦,多次無規(guī)律的出現(xiàn)超時問題儒陨。抓取到客戶端的異常錯誤后花嘶,想進(jìn)一步的分析是何原因?qū)е铝巳缦庐惓D兀?/p>
Timeout awaiting response (outbound=0KiB, inbound=0KiB, 5984ms elapsed, timeout is 5000ms), command=GET,
next: GET n:AbpZeroMultiTenantLocalizationDictionaryCache,c:HMedia#zh-CN#0,
inst: 0, qu: 0, qs: 498, aw: False, rs: ReadAsync, ws: Idle, in: 65536,
serverEndpoint: xxxxxx-cache.redis.cache.chinacloudapi.cn:6380,
mc: 1/1/0, mgr: 10 of 10 available, clientName: RD0003FF04A4F7,
IOCP: (Busy=70,Free=930,Min=250,Max=1000),
WORKER: (Busy=430,Free=32337,Min=400,Max=32767), v: 2.1.58.34321
官方文檔對該類問題的解釋為:
雖然這里Busy大于Min的Worker數(shù)量,表示目前客戶端中所設(shè)置的ThreadPool值不夠用蹦漠,需要做一定的調(diào)整椭员。但是這并不是Redis出現(xiàn)持續(xù)超時的根本原因,還是需要繼續(xù)排查是否有某一方面達(dá)到了性能的限制呢津辩?
問題分析
- 第一步:分析Azure Redis的各種指標(biāo)拆撼,查看在超時時間點(diǎn)是否有突增的尖峰。
- 第二步:對比尖峰值喘沿,查看是否有突破當(dāng)前定價層的閾值闸度。
- 第三步:查看Redis日志,發(fā)現(xiàn)不常規(guī)的點(diǎn)蚜印。使用各種已知的命令來輔助調(diào)查莺禁。
- 第四步:如何來避免呢?
根據(jù)以上的四步原則窄赋。查看Azure Redis的指標(biāo)哟冬,發(fā)現(xiàn)網(wǎng)絡(luò)的讀寫出現(xiàn)尖峰。指標(biāo)圖類似于:
- 緩存讀取量:指定報告間隔期間忆绰,從緩存中讀取的數(shù)據(jù)量浩峡,以每秒兆字節(jié)數(shù)(MB/秒)為單位。 此值來源于支持虛擬機(jī)的網(wǎng)絡(luò)接口卡错敢,該虛擬機(jī)托管緩存翰灾,但并不特定于 Redis。 此值對應(yīng)于該緩存使用的網(wǎng)絡(luò)帶寬。如果要針對服務(wù)器端網(wǎng)絡(luò)帶寬限制設(shè)置警報纸淮,則可使用此 Cache Read 計(jì)數(shù)器來創(chuàng)建警報平斩。
- 緩存寫入量:指定報告間隔期間,寫入緩存中的數(shù)據(jù)量咽块,以每秒兆字節(jié)數(shù)(MB/秒)為單位绘面。 此值來源于支持虛擬機(jī)的網(wǎng)絡(luò)接口卡,該虛擬機(jī)托管緩存侈沪,但并不特定于 Redis揭璃。 此值對應(yīng)于從客戶端發(fā)送到緩存的數(shù)據(jù)的網(wǎng)絡(luò)帶寬。
但是峭竣,只查看主節(jié)點(diǎn)的流量(注:Azure Redis有兩個節(jié)點(diǎn)塘辅,一主一從),寫入流量(409KB)與上圖中的38.07MB卻存在巨大的差別, 難到這是有連接直接操作從節(jié)點(diǎn)皆撩,而不通過主節(jié)點(diǎn)扣墩?
#根據(jù)以下步驟,就可以查看到從節(jié)點(diǎn)的網(wǎng)絡(luò)寫入扛吞,讀取指標(biāo)圖:
1)在Azure Redis的門戶中呻惕,打開Metrics頁面, 選取name space為Redis Cache standard metrics
2)Metric 選取Cache Write (Instance Based)
3)添加Filter滥比,Primary = False
4)啟用Apply Splitting亚脆,按照端口細(xì)分
#如果發(fā)現(xiàn)從節(jié)點(diǎn)有大量的流量操作,已經(jīng)嚴(yán)重影響主節(jié)點(diǎn)的正常指令執(zhí)行
這個時候盲泛,就需要跟進(jìn)一步的分析濒持,是那些客戶端連接到Redis?它們執(zhí)行命令的次數(shù)有多少呢寺滚?它們執(zhí)行了那些命令呢柑营?
可以通過Redis-cli.exe工具連接到Redis后,通過 client list 當(dāng)前的客戶端連接情況和IP地址村视,已經(jīng)通過numops查看當(dāng)前連接已經(jīng)執(zhí)行的OPS官套。然后通過 monitor 指令實(shí)時監(jiān)控命令的執(zhí)行和所發(fā)出請求的IP地址
- 使用 redis-cli.exe連接到Azure Redis服務(wù)
redis-cli.exe -h yourcachename.redis.cache.chinacloudapi.cn -p 6379 -a YourAccessKey
-
使用 client list 查看你連接數(shù)和 numops數(shù) (實(shí)時)
No alt text provided for this image -
使用monitor指令監(jiān)控所執(zhí)行的命令(實(shí)時)
No alt text provided for this image
#如何來避免其他非法的連接呢?對IP地址進(jìn)行限制蚁孔,設(shè)置白名單奶赔。或者啟用內(nèi)網(wǎng)訪問 或者啟用專用終結(jié)點(diǎn)
[完]
參考資料
排查 Azure Cache for Redis 超時問題:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-troubleshoot-timeouts
將 Redis 命令行工具與 Azure Redis 緩存配合使用:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-redis-cli-tool#connect-using-the-redis-command-line-tool
Azure數(shù)據(jù)中心各資源的IP地址列表:https://www.microsoft.com/en-us/download/details.aspx?id=57062
Redis Private Endpoint:https://docs.microsoft.com/zh-cn/azure/azure-cache-for-redis/cache-private-link
Redis部署至VNET:https://docs.microsoft.com/zh-cn/azure/azure-cache-for-redis/cache-how-to-premium-vnet
當(dāng)在復(fù)雜的環(huán)境中面臨問題杠氢,格物之道需:濁而靜之徐清站刑,安以動之徐生。 云中鼻百,恰是如此!
分類: 【Azure Redis 緩存】
標(biāo)簽: Timeout awaiting response, redis-cli, Azure Redis