与默认的Ubuntu版本相比,为什么重新编译的PHP使用了大量的CPU?

与默认的Ubuntu版本相比,为什么重新编译的PHP使用了大量的CPU?,php,optimization,ubuntu,compilation,Php,Optimization,Ubuntu,Compilation,我有一个连续运行的多进程PHP(CLI)应用程序。最初,我使用的是标准的Ubuntu 10.04 PHP包构建(5.3.2-1ubuntu4.18)。但是,我正在尝试优化内存使用,因为每个进程使用的内存量限制了我在任何给定时间可以运行的fork的数量(因为我有有限的可用内存)。按照的建议,我重新编译了PHP,禁用了所有扩展,然后只重新启用应用程序所需的扩展(mysql、curl、pcntl、posix和json)。我的配置命令是: './configure' '--prefix=/usr/lo

我有一个连续运行的多进程PHP(CLI)应用程序。最初,我使用的是标准的Ubuntu 10.04 PHP包构建(5.3.2-1ubuntu4.18)。但是,我正在尝试优化内存使用,因为每个进程使用的内存量限制了我在任何给定时间可以运行的fork的数量(因为我有有限的可用内存)。按照的建议,我重新编译了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时间(在top报告的内存量通常为0-1%之前,通常占CPU的15-20%)。有没有可能我遗漏了一些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的速度提高了好几倍。确保已安装扩展,例如


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

您使用的是与库存ubuntu版本相同的.ini文件吗?是的。我只是将它复制到由--with config file path指定的目录,并确认该文件正在与php一起使用-I=>Loaded Configuration file=>/etc/php5/clibare/php.ini您真正应该测量的是脚本运行的速度,而不是CPU使用率。实际上,您希望在脚本运行时100%使用CPU。我不确定是否完全同意,但脚本的运行速度没有比以前快,但需要更多的CPU时间。我不同意的原因是我在机器上运行其他进程,事实上,我希望同时运行40-50个相同的进程。如果每一个都需要15-20%的CPU,我就不会走到这一步。另外,预期CPU使用率低的原因是脚本正在通过网络检索资源,然后处理结果。大部分物理时间都花在等待从网络返回响应上,然后再继续……当然,我可以尝试以异步方式实现这一点,但到目前为止,我还没有强烈的愿望或需要这样做。不幸的是,在Ubuntu标准包中,phpinfo()的Configure命令行被禁用。但是,除此之外,仍然可以从phpinfo()中获取一些配置信息,而不是确切的configure命令。