Redis如何为IOCP找到最佳值

时间:2017-03-21 08:41:12

标签: multithreading redis timeout

目前,我们在使用对Redis实例提出大量请求的应用程序时遇到问题,因为应用程序缓存。

我们收到了不同操作的各种超时。如下所示:

System.TimeoutException: Timeout performing GET MyKey, inst: 2, mgr: Inactive, 
queue: 6, qu: 0, qs: 6, qc: 0, wr: 0, wq: 0, in: 0, ar: 0, 
IOCP: (Busy=6,Free=994,Min=4,Max=1000), 
WORKER: (Busy=3,Free=997,Min=4,Max=1000)

在查阅文档后,我们发现以下文章(https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Timeouts.md)建议我们增加WorkerThreads的数量(默认值= 4)

我们如何找到最佳/最大wokerthreads的最佳数量? Redis建议从200-300开始。但是当我们与默认值4进行比较时,这似乎很高。

设置数字太高时我们遇到的问题是什么?为什么这个默认值低至4?

1 个答案:

答案 0 :(得分:1)

请注意,使用ThreadPool.SetMinThreads(...)设置值时,并不意味着那些多个线程会立即启动或始终保持。它只是意味着线程池将按需提供新的工作线程或I / O完成线程(没有任何限制),直到它达到"最小值"为每种类型的线程设置。

默认情况下,最小线程数设置为系统上的处理器数。

您不必将其设置为200-300。您可以将其增加到某个值(比如100)并根据需要进行相应调整。在突发性负载的情况下,您需要更高的数字。