0

我有一个连续运行的多进程 PHP (CLI) 应用程序。我正在尝试优化内存使用,因为每个进程使用的内存量限制了我在任何给定时间可以运行的分叉数量(因为我有有限的可用内存量)。我尝试了几种方法。例如,按照preinheimer给出的建议,我重新编译了 PHP,禁用了所有扩展,然后只重新启用了我的应用程序所需的那些(mysql、curl、pcntl、posix 和 json)。但是,这并没有减少内存使用量。它实际上略有增加。

我几乎准备好放弃多进程方法,但我正在做最后的努力,看看是否有其他人对如何减少内存使用有更好的想法。我将在下面发布我的替代方法,其中涉及对我的应用程序进行重大重构。

非常感谢任何可以帮助我应对这一挑战的人!

4

1 回答 1

0

多进程 PHP 应用程序(例如使用pcntl_fork(). 这可以很容易地等同于每个进程 10 MB 的内存或更多(取决于应用程序)。理论上,将扩展编译为共享库应该可以减少内存占用,但我在这方面的成功有限(实际上,我在这方面的尝试由于某种未知原因而使内存使用情况变得更糟)。

更好的方法是使用多线程。在这种方法中,应用程序驻留在单个进程中,但多个操作可以在单独的线程中*同时**执行(即多任务)。传统上,PHP 对于多线程应用程序并不理想,但最近一些新的扩展使 PHP 中的多线程变得更加可行。例如,请参阅this answer to an question about multithreading in PHP(其接受的答案相当过时)。

对于上述问题,我计划使用pthreads将我的应用程序重构为多头应用程序。这需要大量的修改,但它会(希望)为应用程序带来更高效的整体架构。我将在继续进行时更新此答案,并为其他想做类似事情的人提供一些重构示例。其他人随时提供反馈,并使用代码示例更新此答案!

*关于并发的脚注:除非有一台多核机器,否则这些操作实际上不会同时执行。但是它们将被安排在不同的小时间片中在 CPU 上运行。从用户的角度来看,它们似乎是同时运行的。

于 2013-02-22T09:08:08.590 回答