I'm using StackExchange.Redis client in a c# wcf application : I use only the synchronous command to get and set values. The problem is I have a timeout with this curious log :
Timeout performing EXISTS DataKey:50,
inst: 1, queue: 1, qu: 0, qs: 1, qc: 0, wr: 0, wq: 0, in: 0, ar: 0, clientName: Machine1,
serverEndpoint: redis-server:6381, keyHashSlot: 7984,
IOCP: (Busy=1,Free=799,Min=8,Max=800),
WORKER: (Busy=5,Free=795,Min=8,Max=800)
(Please take a look at this article for some common client-side issues that can
cause timeouts: http://stackexchange.github.io/StackExchange.Redis/Timeouts)
If I understand that correctly it means that my get value is queued because there is five worker threads ? Using netstat, I see that my application is opening two physical connections to the server . I have made sure to have enought threads available in my threadpool. In my connection settings I have a syncTimeout=3000... If I use the redis-cli, I could get the value of the key in 0.64 secondes.
Can anyone help please? What can I do? Does I have to use async in my code all the way or find another redis client lib ?
From "WORKER: (Busy=5,Free=795,Min=8,Max=800)", I see that there are 5 Busy worker threads and a minimum of only 8 worker threads. I suspect that if you look at the whole set of errors that you received, you might find that Busy is greater than the Min count in some cases. This would indicate threadpool throttling. The link also provides some solutions on increasing the Min Thread counts for Worker and IOCP threads.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With