强制服务器上100%的CPU使用率

时间:2014-08-05 20:46:41

标签: c# asp.net amazon-ec2 parallel-processing

我有一个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 Intel Xeon E5-2680 v2(Ivy Bridge)处理器
vCPU:32
mem(GiB):60

在此服务器上,CPU利用率从未超过60%且运行速度非常慢。

只有这台服务器才会导致这种情况发生?我该如何排除故障?

1 个答案:

答案 0 :(得分:0)

问题可能在于“ForAll”方法以及它如何扩展。

要拥有100%的CPU,每个核心应该有1个线程执行非常繁重的操作。

TPL在内部创建任务,并有一个默认的TaskScheduler类来处理请求并将其委托给线程池。也许那里有一些滞后。

我创建了一种手动创建线程或任务的不同方法(每个核心1个)。如果你仍然没有100%的CPU,我认为服务器故障是个好主意。可能与物理/虚拟机或服务器中的某些限制有关。

相关问题