将进程分配给CPU内核

我可以访问运行Apache 2.2.15和MySQL 5.1.52的CentOS 6 Web服务器(PHP / MySQL论坛)。 这个盒子有双八核心Xeons。

我发现看CPU图的是,前两个核心(0和1)达到90%的使用率,而另外14个只达到30-40%的使用率。 核心8,我相信是第二个处理器的第一个核心,看到的高使用率(高达90%),但如上所述,其他所有的低。

Apache启动了大约20个进程,我怀疑在默认情况下,它不能理解,并且自然地利用所有的内核。 这应该是我认为的核心工作(可以有人确认吗?)。 但是,尽pipe这些内核最大化,尽pipe备用RAM和磁盘I / O仍然有明显的性能下降。

有什么我可以调整在Apache中“让它意识到”所有其他核心,或者内核peramater分配某些进程到某些核心? 例如,我可以排除核心0和1,用于Apache和MySQL吗?

使用taskset优化进程关联性

例如将当前进程分配给cpu-core 0,1,3

$ taskset -cp 0,1,3 $$

pid 21698的当前关联列表:0-7

pid 21698的新关联列表:0,1,3

隔离CPU只运行特定的进程。 内核参数“isolcpus”可以隔离特定的CPU执行其他任务。 与taskset一起,您可以让特定的CPU只运行指定的任务。 例如,在grub.conf中放置“isolcpus = 2,3”将隔离CPU 2和3。

http://honglus.blogspot.com/2011/03/tune-interrupt-and-process-cpu-affinity.html

并非所有的应用程序stream量都是高度可协调的。 我们有一个内部的networking应用程序,即使在24核心的怪物上运行,也是坚决的单线程的。 在我们的例子中,networking服务器将很乐意使用尽可能多的内核, 但是当绑定到一个特定的应用程序服务器,它停留在一个。

如果我们考察单线程进程运行时每个内核的使用情况,那么每个内核运行在100 *(1 / n)的百分比。 内核正在将负载转移到多核上,但是一个处理器的容量只有100%被使用。

在我们的例子中,我们正在运行一个LAMx堆栈。 在这个答案中,(x)未定义。 事实certificate,(x)代表的是相当重要的。 所以是的,使用大量内核的能力取决于堆栈中的所有步骤,而不仅仅是LAM部分。

内核的工作就是安排任务。 在多核环境中,有时(但并不总是),内核会将作业分配给所有内核,但是在一个或两个内核上,所有像apache这样的重载进程都被分配。
理想情况下,您的内核应该已经意识到您的机器中有多个内核。 仍然运行以下确认为超级用户:

dmidecode|grep Core 

在我的双核心机器上说:

 Version: Intel(R) Core(TM) i5-2410M CPU @ 2.30GHz Core Count: 2 Core Enabled: 2