Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 是什么导致ASP.NET应用程序中CPU使用率高?_Multithreading_Threadpool_Cpu Usage_Windows Performance Analyzer - Fatal编程技术网

Multithreading 是什么导致ASP.NET应用程序中CPU使用率高?

Multithreading 是什么导致ASP.NET应用程序中CPU使用率高?,multithreading,threadpool,cpu-usage,windows-performance-analyzer,Multithreading,Threadpool,Cpu Usage,Windows Performance Analyzer,我有ASP.NET应用程序(Framework4.8),它偶尔会在几毫秒内达到100%的CPU使用率。必须知道,在CPU负载期间或之前,应用程序不会经历客户端RPS突发。实际上,在CPU使用量激增之前,它只服务于几个客户端请求 通过WPA图形查看perfview转储CPU使用率(采样),我看到CPU峰值的顶部以及峰值的幻灯片都充满了从Dequeue和TrySteal方法堆积起来的CPU样本。另外,系统指标显示,在CPU加载期间,应用程序经历了大量使用的工作线程(ThreadPool.GetAva

我有ASP.NET应用程序(Framework4.8),它偶尔会在几毫秒内达到100%的CPU使用率。必须知道,在CPU负载期间或之前,应用程序不会经历客户端RPS突发。实际上,在CPU使用量激增之前,它只服务于几个客户端请求

通过WPA图形查看perfview转储
CPU使用率(采样)
,我看到CPU峰值的顶部以及峰值的幻灯片都充满了从
Dequeue
TrySteal
方法堆积起来的CPU样本。另外,系统指标显示,在CPU加载期间,应用程序经历了大量使用的工作线程(
ThreadPool.GetAvailableThreads-ThreadPool.GetMinThreads
),我使用
ThreadPool.SetMinThreads
进行设置。这台机器有16个核,所以我测试了应用程序,每个核的值分别为2048和512个工人:每个核分别为128和32个工人

就目前而言,CPU负载似乎是由大量工作线程造成的,这些线程试图在没有工作请求的情况下接收任何工作请求。因此,工作人员浪费CPU,试图在本地队列、全局线程池队列中查找工作请求,并试图从其他线程的本地队列中窃取工作


是什么原因导致工作线程数量激增?16个CPU内核真的会因为512个工人试图找到工作而变得匮乏吗?或者这仅仅是任何其他问题的结果

附件说明

1) CPU样本在所有应用程序线程堆栈中的分布

2) CPU样本在单个随机应用程序线程堆栈中的分布


“16个CPU核真的会因为512个工作线程而耗尽吗”似乎是这样的,特别是在.net的vm这样高度复杂的环境中。有这么多工人有什么意义呢?关键是我们多年来在许多应用程序中使用了每个核心128或32名工人的修改器,实际上它以前工作得很好。这意味着每一个核心都能够并行地为多达128名工人提供相当好的服务。尽管我们的应用程序被认为是高负载的,但它们的行为似乎是容错的。上面的应用程序在相当长的一段时间内都能很好地承受200转/秒的负载。它为什么开始遇到CPU使用问题还远不明显。