我有一个运行 Magento 的 Linux 网络服务器(Ubuntu 12.04,内核 3.2.0),其中有相当多的 PHP-FPM 子进程。
由于 Magento 是一个重型框架,我经常会看到几个子进程的 CPU% 膨胀(使用 htop 查看)持续几秒钟,然后才退出前 N 名。
我一直在阅读有关 Linux CPU 调度程序的文章,我得到的结论是 SCHED_BATCH似乎为进程提供比默认的 SCHED_OTHER 更长的时间片。
如果我将所有 PHP-FPM 进程的调度程序更改为 SCHED_BATCH,会不会有好处?还是我误解了调度程序?
答案1
学习后关于 SCHED_BATCH 的一些知识,我甚至不会尝试对它进行基准测试:
SCHED_BATCH 还会触发更长的、类似批处理的时间片 - 默认的 SCHED_BATCH 时间片为 1.5 秒。
SCHED_BATCH 显然是为运行时间非常长(数小时甚至数天)的计算密集型作业而设计的。您的作业仅需要几秒或几分之一秒的计算密集型时间。
这几乎使它无法用于 Web 服务器。如果数据库在同一台机器上,情况会更糟,因为它们可能会争夺其中一个超长的时间片。