昨晚我在一个网站上做了一个负载测试。我发现我的一个共享缓存是一个瓶颈。我正在使用 ReaderWriterLockSlim 来控制数据的更新。不幸的是,大约有 200 个请求几乎在同一时间尝试更新数据。这也与 CPU 使用率峰值相吻合。
正在更新的数据位于 ASP.NET 缓存中。我想做的是如果 CPU 使用率在 75% 左右,我想跳过缓存并在另一台机器上访问数据库。
我的问题是我不知道创建一个新的性能计数器来检查 CPU 使用情况有多昂贵。另外,如果我可能想要过去 2 或 3 秒内的平均 CPU 使用率。但是,我不能坐在那里计算 CPU 时间,因为这比当前更新缓存所需的时间更长。
有没有一种简单的方法来获得平均 CPU 使用率?这有什么缺点吗?
我还在考虑总计锁定的等待计数,然后在某个阈值切换到数据库。我对这种方法的担忧是,改变硬件可能会允许更多的锁,而对系统的压力更小。并且为阈值找到正确的平衡也很麻烦,并且没有考虑机器上的任何其他负载。但这是一种简单的方法,而且简单在 99% 的情况下都更好。