[英]Force 100% CPU usage on server
我有一个C#ASP.NET应用程序,它可以运行一些冗长的仿真,并且可以并行执行。 像这样
static void Main(string[] args)
{
var myArray = new[] {450, 586, 879, 457, 657, 852, 407, ... };
myArray.AsParallel().ForAll(DoStuff);
}
static void DoStuff(int number)
{
//do stuff
}
在本地以及我的大多数服务器(Amazon EC2实例)上运行时,执行此代码将占用100%的CPU。 这就是我要的。 我需要这些大型计算尽快完成
我的一台服务器是C3.8XLARGE
英特尔至强E5-2680 v2(Ivy Bridge)处理器
vCPU:32
记忆(GiB):60
在此服务器上,CPU利用率永远不会超过60%,并且运行非常缓慢。
是什么导致仅在此服务器上发生这种情况? 我该如何排除故障?
问题可能出在“ ForAll”方法及其扩展方式上。
要拥有100%的CPU,每个内核应该有1个线程来做一些非常繁重的事情。
TPL在内部创建任务,并具有默认的TaskScheduler类来处理请求并将其委派给线程池。 也许那里有些滞后。
我会创建另一种手动创建线程或任务的方法(每个内核1个)。 如果您仍然没有获得100%的CPU,我认为服务器故障是个好主意。 可能与物理/虚拟机有关或服务器中的某些限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.