Laravel4内存消耗问题

时间:2013-12-04 11:46:50

标签: php laravel-4

案例

目前我正在使用Laravel 4开发应用程序。我安装了profiler以查看有关我的应用的统计信息。这是截图:

enter image description here

问题

  • 您可以看到我的流浪者(Ubuntu 64位+ Nginx + PHP 5.3.10+ MySQL)中的每个请求(非常简单的页面)消耗 12.25 MB 内存。你觉得这太过分了吗?这意味着如果我有100个并发连接,则内存消耗将约为1 GB。我认为这太多了,你觉得怎么样?
  • 为每个请求加载 237 个文件。你认为这太多了吗?
  • 当我将此应用程序部署到我的服务器(使用带有Zend OPcache + MySQL的Apache + PHP 5.5.3的Centos 6.4)时,内存消耗会急剧下降。这是来自服务器的屏幕截图:

enter image description here

您如何看待我的mac和服务器之间的区别?

1 个答案:

答案 0 :(得分:10)

不,你真的不需要担心这个。

对于PHP程序来说,12MB并不是很大。 100个并发连接是 lot

要将其置于上下文中,假设您的PHP页面需要半秒钟才能运行,这意味着您需要每分钟有12000个页面加载才能实现一致的100个并发连接。这比我的任何网站都要多得多,我可以告诉你。

当然,如果您的页面加载时间超过半秒,这个数字会很快降低,并且您可以更轻松地实现100个并发连接。

这就是为什么专注于性能 的一个明智之举 - 你的程序运行得越快,释放内存的速度就越快为下一位访客。事实上,除非你有一个非常重要的内存使用问题(你没有),在这种情况下,性能可能比使用的内存量更重要。

在任何情况下,如果您确实有100个并发连接,那么在使用PHP之前,您可能会遇到服务器软件问题。 Apache对最大连接数有一个默认限制,它远远低于100.(当然,你可以提高它,但如果你真的得到那种流量,你可能会想要更多的服务器)

至于12M内存使用情况,你实际上不可能比PHP程序少得多。 PHP需要一块内存才能在第一时间运行,并且框架也需要一个块,因此大部分12M都是由于这个原因。这意味着虽然您的小程序可能使用12M,但并不意味着较大的程序会使用两倍的程序。所以你可能不需要太担心它。

如果您确实遇到了高流量和性能问题,可以采用多种方法来缓解此问题。主要是使用缓存。 PHP 5.5内置了一个OpCache模块,它将为您缓存程序,因此它不必执行所有引导工作,例如每次加载所有文件。对于某些系统,这可能会对性能产生巨大影响。

您还可以使用其他层缓存,例如Varnish等服务器级页面缓存,它将缓存您的静态页面,以便在页面内容未更改时甚至不需要调用PHP

当然还有其他原因可以集中关注性能,例如让访问者满意)