【问题标题】:Laravel4 memory consumption concernsLaravel4 内存消耗问题
【发布时间】:2016-02-24 06:28:29
【问题描述】:

案例

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

问题

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

你如何看待我的mac和服务器之间的这种差异?

【问题讨论】:

  • 感谢您的评论!你能澄清一下你在说哪个缓存吗?查看、代码还是数据缓存?
  • 您说您的 vagrant box 运行 PHP 5.3.10 而您的服务器运行 PHP 5.5.3。由于版本差异如此之大,预计内存消耗会大大降低。
  • @NikiC 谢谢!你是对的。这是减少的原因之一。我在禁用 OPCache 时测试了同一页面。这也将内存使用量从 3.25M 增加到 8.30M
  • @CanGeliş Opcache 使用不同的分配器,因此 opcache 存储的内容不计入 PHP 报告的内存使用量。另一方面 - 由于 opcache 使用的内存在所有 PHP 进程之间共享,从实际角度来看这可能是有意义的。

标签: php laravel-4


【解决方案1】:

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

12MB 对于 PHP 程序来说并不是一个很大的数目。 100 个并发连接是 很多

为了把它放在上下文中,假设您的 PHP 页面需要半秒才能运行,这意味着您需要每分钟加载 12000 个页面才能实现一致的 100 个并发连接。我可以告诉你,这比我的任何网站获得的流量都要多。

当然,如果你的页面加载时间超过半秒,这个数字会很快下降,你的 100 个并发连接可以更容易地成为可能。

这就是为什么关注性能是一个非常好的主意的原因之一 - 程序越快完成运行,它可以越快释放内存为下一位访客。事实上,除非你有一个非常严重的内存使用问题(你没有),否则在这种情况下,性能可能比正在使用的内存量更重要。

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

至于 12M 的内存使用量,你不可能比 PHP 程序少多少。 PHP 需要一块内存才能首先运行,而框架也需要一块内存,所以你的 12M 中的大部分将是由于这个原因。这意味着尽管您的小程序可能使用 12M,但并不意味着更大的程序会使用两倍。所以你可能不需要太担心它。

如果您确实有高流量并因此出现性能问题,有多种方法可以缓解该问题。主要的一个是使用缓存。 PHP 5.5 带有一个内置的 OpCache 模块,它会为你缓存你的程序,这样它就不必做所有的引导工作,比如每次都加载所有的文件。对于某些系统,这可能会对性能产生巨大影响。

您还可以使用其他缓存层,例如像 Varnish 这样的服务器级页面缓存,它将缓存您的静态页面,这样即使页面内容没有更改,也无需调用 PHP .

当然还有其他原因需要关注性能,比如让访问者满意)

【讨论】:

  • 感谢您的回答!你觉得我的服务器和vagrant box有什么区别?
  • 12 mb 有点异常.....另一个大型框架 yii 框架仅使用 3-4 mb 用于原始页面或 6 mb 用于密集页面....尝试使用更快的更少内存,更容易 yii @CanGeliş
猜你喜欢
  • 2015-11-03
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多