为什么与默认的Ubuntu版本相比,重新编译PHP需要大量的CPU


Why is re-compiled PHP using huge amounts of CPU compared to default Ubuntu build?

我有一个连续运行的多进程PHP(CLI)应用程序。最初,我使用的是标准的Ubuntu 10.04 PHP包构建(5.3.2-1ubuntu4.18)。然而,我正在努力优化内存使用,因为每个进程使用的内存量限制了我在任何给定时间可以运行的fork的数量(因为我的可用内存量有限)。根据prenheimer给出的建议,我重新编译了PHP,禁用了所有扩展,然后只重新启用了应用程序所需的扩展(mysql、curl、pcntl、posix和json)。我的配置命令是:

'./configure'  '--prefix=/usr/local/phpbare' '--with-config-file-path=/etc '
/php5/clibare' '--disable-all' '--with-mysql=mysqlnd' '--with-curl' '
'--enable-pcntl' '--enable-posix' '--enable-json'

这个新的"基本"构建允许我的应用程序运行,但令我惊讶的是,当我使用top查看正在运行的进程时,它使用的内存量与以前大致相同,而且(更大的问题),它使用了大量的CPU时间(通常为CPU的15-20%,而在top报告的时间量通常为0-1%之前)。有没有可能我遗漏了一些php扩展,它以某种方式优化了脚本以使用更少的计算资源???或者Ubuntu构建可能是针对Ubuntu架构优化的,而我的自定义构建缺少这些优化?如果是这样的话,我该如何弄清楚Ubuntu构建中使用了哪些优化,以便在我的"基本"构建中重新创建它们?

以下是ps aux | grep php的输出片段,用于在下面的注释中演示我的观点:

root  12952  0.3  0.9  33176  4968 pts/2    S    Feb14  11:15 s.php 5
root  12955  0.3  0.9  32664  4732 pts/2    S    Feb14  11:12 s.php 5
root  12958  0.3  0.9  32664  4796 pts/2    S    Feb14  10:51 s.php 5
root  12961  0.3  0.9  32740  4752 pts/2    S    Feb14  11:07 s.php 5
root  14162  0.3  0.9  33000  4904 pts/2    S    Feb14  10:51 s.php 5
root  14165  0.3  1.0  33256  5340 pts/2    S    Feb14  10:56 s.php 5
root  23426  9.5  1.1  13492  6040 pts/2    S    Feb15 151:38 s.php 1 

操作码缓存使PHP速度提高了数倍。确保已安装诸如APC之类的扩展。

您还可以检查标准包的phpinfo(),看看它使用了什么configure选项,并使用相同的选项重新编译,以检查这是配置问题还是其他问题,比如不同的编译器或库。