ASP.NET内存缓存&;线程阻塞
我们有一个大量使用.NET提供的MemoryCache类的应用程序,直到最近,我们的服务器上的一切都运行得很好,但现在我们开始注意到CPU峰值在高峰使用时间时频繁出现 在使用WinDbg分析了一些进程转储之后,出现了一个共同的主题,我认为这与我们使用MemoryCache有关 基本上,我看到的是许多线程被使用TimerQueue对象的一个线程阻塞,我相信它正试图使MemoryCache对象中的一个项目过期 目前,我们为每个用户缓存特定级别的数据库结果,绝对过期时间为10秒。我们所使用的服务器有16个内核,我认为这足以处理相当数量的并发性 因此,如果系统上的并发使用率增加(可能尝试写入缓存),而自动缓存过期线程正在尝试从缓存中删除项目,那么所有这些线程都将被阻止,直到从缓存中删除完成 这个解释似乎准确吗?如果准确,是否有人有改进性能的建议 到目前为止,我仅有的解决方案如下:ASP.NET内存缓存&;线程阻塞,asp.net,multithreading,memorycache,Asp.net,Multithreading,Memorycache,我们有一个大量使用.NET提供的MemoryCache类的应用程序,直到最近,我们的服务器上的一切都运行得很好,但现在我们开始注意到CPU峰值在高峰使用时间时频繁出现 在使用WinDbg分析了一些进程转储之后,出现了一个共同的主题,我认为这与我们使用MemoryCache有关 基本上,我看到的是许多线程被使用TimerQueue对象的一个线程阻塞,我相信它正试图使MemoryCache对象中的一个项目过期 目前,我们为每个用户缓存特定级别的数据库结果,绝对过期时间为10秒。我们所使用的服务器有1
- 添加一些负载平衡以帮助分散使用,并希望避免此问题
- 将过期阈值提高到30秒,以帮助抵消它
- 完全使用不同的缓存机制