Why i use virtual Thread, redission error: Command still hasn't been written into connection!
Under high concurrency scenarios using Java virtual threads, Redisson encounters an error after running for a period:
org.redisson.client.RedisTimeoutException: Command still hasn't been written into connection! Check CPU usage of the JVM. Check that there are no blocking invocations in async/reactive/rx listeners or subscribeOnElements method. Check connection with Redis node: ip/[ip]:6379 for TCP packet drops. Try to increase nettyThreads setting. Netty pending tasks: 1704, Node source: NodeSource [slot=0, addr=null, redisClient=null, redirect=null, entry=null], connection: RedisConnection@-543958019 [redisClient=[addr=redis://ip:6379,ip/[ip]:6379], channel=[id: 0x2641da26, L:/[ip]:44596 - R:ip/[ip]:6379], currentCommand=null, usage=1], command: (GET), params: [tenant_xxxx:system:config:58] after 3 retry attempts
but when i use thread pool, the issue nerver happen
Redisson config:
poolSize: 50
poolMinIdleSize: 10
slavePoolSize: 2
slavePoolMinIdleSize: 1
dnsMonitoringInterval: 5000
readMode: MASTER
scanInterval: 30000
timeout: 5000
connectTimeout: 10000
idleConnectionTimeout: 300000
retryAttempts: 1
retryInterval: 1500
pingConnectionInterval: 60000 virtural thread:
SimpleAsyncTaskExecutor executor = new SimpleAsyncTaskExecutor();
executor.setThreadFactory(virtualThreadFactory);
executor.setConcurrencyLimit(500);
executor.setDaemon(true);
return executor;Source: redisson/redisson