案例
目前我正在使用 Laravel 4 开发一个应用程序。我安装了 profiler查看有关我的应用程序的统计信息。这是截图:
问题
- 您可以看到,在我的 vagrant(Ubuntu 64 位 + Nginx + PHP 5.3.10+ MySQL)中,每个请求(非常简单的页面)都会消耗 12.25 MB 内存。你觉得这太过分了吗?这意味着如果我有 100 个并发连接,则内存消耗约为 1 GB。我认为这太过分了,但你觉得怎么样?
- 它会为每个请求加载 237 个文件。你觉得这太过分了吗?
- 当我将此应用程序部署到我的服务器(Centos 6.4 with Apache + PHP 5.5.3 with Zend OPcache + MySQL)时,内存消耗急剧减少。这是服务器的屏幕截图:
您如何看待我的 Mac 和服务器之间的差异?
最佳答案
不,你真的不需要担心这个。
对于 PHP 程序来说,12MB 并不是一个很大的数字。 100 个并发连接已经很多了。
具体来说,假设您的 PHP 页面需要半秒才能运行,这意味着您需要每分钟 12000 次页面加载才能实现一致的 100 个并发连接。我可以告诉你,这比我的任何网站获得的流量都要多。
当然,如果您的页面加载时间超过半秒,这个数字会很快下降,并且您可以更轻松地实现 100 个并发连接。
这就是为什么关注性能确实是个好主意的原因之一‡ - 程序完成运行的速度越快,释放内存的速度就越快为下一位访客。事实上,除非您遇到真正严重的内存使用问题(您没有),否则在这种情况下性能可能比使用的内存量更重要。
无论如何,如果您确实有 100 个并发连接,那么在 PHP 出现问题之前,您的服务器软件很可能会出现问题。 Apache 对最大连接数有默认限制,并且远低于 100。(当然,您可以提高它,但如果您确实获得这种流量,您可能会需要更多服务器) )
至于 12M 内存使用量,您实际上不可能比 PHP 程序使用的内存量少很多。 PHP 需要一大块内存才能首先运行,框架也需要一 block 内存,所以你的 12M 大部分都是由于这个原因。这意味着虽然您的小程序可能使用 12M,但这并不意味着较大的程序会使用两倍的内存。所以你可能不需要太担心。
如果您确实遇到高流量并因此出现性能问题,可以采用多种方法来缓解该问题。主要的一种是使用缓存。 PHP 5.5 内置了一个 OpCache 模块,它将为您缓存您的程序,这样它就不必执行所有引导工作,例如每次加载所有文件。对于某些系统,这可能会对性能产生巨大影响。
您还可以使用其他缓存层,例如像 Varnish 这样的服务器级页面缓存,它将缓存您的静态页面,这样如果页面内容没有更改,甚至不需要调用 PHP .
(‡当然,关注性能还有其他原因,例如让访问者满意)
关于php - Laravel4 内存消耗问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20374542/