目前,我们在使用对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?
答案 0 :(得分:1)
请注意,使用ThreadPool.SetMinThreads(...)设置值时,并不意味着那些多个线程会立即启动或始终保持。它只是意味着线程池将按需提供新的工作线程或I / O完成线程(没有任何限制),直到它达到"最小值"为每种类型的线程设置。
默认情况下,最小线程数设置为系统上的处理器数。
您不必将其设置为200-300。您可以将其增加到某个值(比如100)并根据需要进行相应调整。在突发性负载的情况下,您需要更高的数字。