将进程分配给 CPU 内核

jwb*_*ley 4 tuning centos process apache-2.2

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

我发现查看 CPU 图表是前两个内核(0 和 1)达到了 90% 的使用率,而其他 14 个内核仅达到了 30-40% 的使用率。我认为 Core 8 是第二个处理器的第一个内核,使用率很高(高达 90%),但正如前面提到的,所有其他内核的使用率都很低。

Apache 启动了大约 20 个进程,我怀疑在其默认状态下,它无法理解,并且自然地利用了所有内核。这应该是我认为的内核工作(有人可以确认吗?)。然而,随着这些内核的最大化,尽管有空闲 RAM 和磁盘 I/O,但性能还是会显着下降。

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

sys*_*138 5

并非所有应用程序流量都是高度可并行化的。我们内部有一个绝对单线程的 Web 应用程序,即使在 24 核怪物上运行时也是如此。在我们的例子中,网络服务器很乐意使用与我们为静态服务投入的内核数量一样多的内核;但是当绑定到特定的应用程序服务器时,它会保持不变。

如果我们查看单线程进程运行时每个内核的使用情况,每个内核将以 100*(1/n) 百分比运行。内核正在按照它应该的方式在多个内核之间移动负载,但只使用了一个处理器容量的 100%。

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

  • 这被称为“阿姆达尔定律”。参见 [维基百科](http://en.wikipedia.org/wiki/Amdahl's_law) (2认同)