我正在尝试诊断我们遇到的一些Redis性能问题;具体来说,在Azure Redis缓存中使用3个分片的群集,我们经常会出现如下错误群集:
Endpoint <ip and port> serving hashslot <some hash slot> is not reachable at this point of time. Please check connectTimeout value. If it is low, try increasing it to give the ConnectionMultiplexer a chance to recover from the network disconnect. IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy=69,Free=8122,Min=1,Max=8191), Local-CPU: n/a
我怀疑Worker忙于比Min高很多,但是我认为我无法在Azure产品中对此进行任何调整,因此我正在研究可以在客户端执行的操作。我们在StackExchange.Redis 1.2.6上(代码库是.Net 4.5,因此不能轻易地迁移到2.x代码)。我们没有指定connectTimeout,所以我看到的默认值为5000毫秒;不过,我在下一个版本中添加了显式的connectTimeout。
我首先查看SLOWLOG,但是在“ SLOWLOG GET 5”中的每个条目中,“运行了什么命令”项都有一个(字面上)长900+项的列表,每个项中的第一项列表是“ ManagementCommand”,但此后还有其他项目:
shard1>slowlog get 5
1) 1) (integer) 2732
2) (integer) 1591198499
3) (integer) 24019
4) 1) "ManagementCommand"
2) "account:123456:name"
3) "account:62151:email"
4) "post:575992991:notified"
<etc etc etc>
31) "product:858111:desc"
32) "... (882 more arguments)"
5) "ip address goes here"
6) ""
2) 1) (integer) 2731
2) (integer) 1591198499
3) (integer) 19374
4) 1) "ManagementCommand"
2) "friend:111aaa95"
3) "account:119:kablammo"
<etc etc etc>
31) "liked:5858aabba"
32) "... (993 more arguments)"
3) <you get the idea>
对我来说,我们的实现似乎有些怪异,这可能会有所贡献;每次我们使用特定的字符串键调用内部RedisStorage类时,它都会创建一个“组合键”字符串,该字符串是传入键和一些其他代码的组合,然后在Redis中使用传入键创建一个集合,向该集合添加一个新项,即组合键,并将该组合键项的值设置为随超时传入的值。
但是,尝试搜索“什么是ManagementCommand,如何处理它很慢”以及“此操作的24k和20k微秒甚至'慢',并且我正在拨错树”?证明没有成果。
以前有人看过吗?