ASP.NET内存缓存和线程阻止

时间:2018-06-21 22:37:32

标签: asp.net multithreading memorycache

我们有一个应用程序,该应用程序充分利用了.NET提供的MemoryCache类,直到最近,一切都在我们的服务器上运行良好,但是现在我们开始注意到在高峰使用时间内,CPU频繁出现峰值。

在使用WinDbg分析了一些进程转储后,出现了一个共同的主题,我认为这与我们对MemoryCache的使用有关。

基本上,我看到的是使用TimerQueue对象被一个线程阻塞的许多线程,我认为这是试图使MemoryCache对象中的一项过期。

当前,我们为每个用户缓存一定级别的数据库结果,绝对到期时间为10秒。我们所使用的服务器具有16个内核,我认为这足以处理相当数量的并发。

因此,如果我们在系统上的并发使用量有所增加(可能试图写入高速缓存),而自动高速缓存到期线程正在尝试从高速缓存中删除某项,则似乎发生了所有这些线程将被阻塞,直到从缓存中删除完毕为止。

这种解释似乎正确吗?如果是,那么有人建议提高性能吗?

到目前为止,我仅有的解决方案如下:

  • 添加一些负载平衡以帮助扩展使用范围,并希望避免此问题
  • 将到期阈值增加到大约30秒,以帮助抵消它
  • 完全使用其他缓存机制

0 个答案:

没有答案