redisson 大量ping操作,导致 tps过高
大家好,我是烤鴨:
????這個問題有點奇怪,新服務(wù)上線,redis tps居高不下,還都是ping命令。
環(huán)境:
服務(wù) : 280臺,redis集群:12主24從
問題
由于服務(wù)剛上線,還沒有訪問,發(fā)現(xiàn)ping命令的qps 7K,就很納悶。運維幫忙看了下,確認這些命令的發(fā)起ip是業(yè)務(wù)服務(wù)。
問題排查
項目中用到了 lettuce和redisson,在測試環(huán)境測試,嘗試把redisson去掉后,沒有大量ping了。
加上之后,又有了,頻率大概是 每分鐘 26次。
看下源碼
跟了源碼發(fā)現(xiàn)是 PingConnectionHandler.sendPing 發(fā)起的ping操作。
如果觸發(fā)了 channelActive 就會定時執(zhí)行ping,檢測channel 是否還保持連接。
protected void sendPing(final ChannelHandlerContext ctx) {final RedisConnection connection = RedisConnection.getFrom(ctx.channel());final RFuture<String> future = connection.async(StringCodec.INSTANCE, RedisCommands.PING);config.getTimer().newTimeout(new TimerTask() {@Overridepublic void run(Timeout timeout) throws Exception {CommandData<?, ?> commandData = connection.getCurrentCommand();if ((commandData == null || !commandData.isBlockingCommand()) && (future.cancel(false) || !future.isSuccess())) {ctx.channel().close();log.debug("channel: {} closed due to PING response timeout set in {} ms", ctx.channel(), config.getPingConnectionInterval());} else {sendPing(ctx);}}// 決定ping的頻率,為0表示不再ping了,默認是0}, config.getPingConnectionInterval(), TimeUnit.MILLISECONDS); }大部分人都不會有這個問題,因為 redisson默認的 pingConnectionInterval 就是0…
主要是寫公共組件那哥們把這個值默認寫成了60s…
結(jié)論
這個值改了之后就沒有這個問題了。不過ping tps: 7k 確實有點詭異。
這個7k 只是部分client發(fā)起的,再平均到redis 實例,每個實例150 tps,也還可以接受吧。
最終發(fā)現(xiàn)是發(fā)現(xiàn)不同的grafana統(tǒng)計數(shù)據(jù)有差異,估計150 tps差不多。
總結(jié)
以上是生活随笔為你收集整理的redisson 大量ping操作,导致 tps过高的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1-5Tomcat 目录结构 和 web
- 下一篇: Mybatis源码学习笔记