Redis 如何为 IOCP 找到最佳值



目前,我们使用向 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(

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新