PHP CLI - 检测我的内存浪费在哪里
Posted
技术标签:
【中文标题】PHP CLI - 检测我的内存浪费在哪里【英文标题】:PHP CLI - Detect where my memory is wasted 【发布时间】:2011-02-03 09:54:55 【问题描述】:我正在为几个 CLI 守护程序使用 php + Zend 框架。 它们占用了相当多的内存。我假设 Zend 框架部分可能会导致这种情况,但我希望有事实告诉我内存浪费在哪里。
如何确定内存浪费在哪里?这只是一个试错过程吗? 还有如何改进垃圾收集(我读了一些文章,这也可能是导致大量内存使用的问题)。
【问题讨论】:
看看这个问题:***.com/questions/4286193/… 【参考方案1】:我建议使用XDebug 的分析器,它应该可以为您提供所需的答案。
分析器将生成一个 cachegrind 文件,您可以在 KCacheGrind 等工具中查看该文件,以了解程序的瓶颈和内存使用情况。
在 XDebug 的分析器页面上了解更多信息:http://www.xdebug.org/docs/profiler
【讨论】:
据我所知,分析器只分析所花费的时间,而不是内存消耗? @Sebastian Hoitz, xdebug.org/docs/execution_trace - 它(xdebug)也可以跟踪内存消耗【参考方案2】:IME,PHP 使用大量内存来解析代码 - 尝试构建一个简单的脚本,该脚本除了显式包含您正在使用的所有库并在开始/结束时跟踪内存使用情况之外什么都不做。将此与您在实际脚本中看到的内容进行比较。
Htbaa 部分正确 - 较新版本的 PHP 具有更智能的垃圾收集器,但早期版本仍然进行垃圾收集 - 他们只是找不到较新 gc 所做的所有情况。但是由于它的垃圾收集,在稳定输入负载的情况下,您通常会看到内存使用情况出现锯齿状。
但是好的垃圾回收不会修复错误的代码——如果你在一个不在堆栈上的变量中存储了一些东西,那么你需要在完成后取消设置它。
【讨论】:
【参考方案3】:您运行的是什么版本的 PHP?只有 PHP >=5.3 有一个不错的垃圾收集器。 PHP
【讨论】:
不一定 - 仅当您遇到孤立引用的问题时(对象对此特别不利 - 但数组也会遇到同样的问题)。 5.3 只添加了一个“圆形参考检测器”。 GC 的其余部分是相同的 根据我的经验,让 PHP 5.2 守护进程占用所有内存并不需要太多。我的案例只是一个基于 Zend_Queue 的简单工作人员。即使回退到排除对象并运行一个空的while
循环,它也会继续消耗内存,直到到达memory_limit
并且守护进程自行终止。在 PHP 5.3 中,这些问题都消失了。遗憾的是,生产服务器上还没有 PHP 5.3 :-)。以上是关于PHP CLI - 检测我的内存浪费在哪里的主要内容,如果未能解决你的问题,请参考以下文章
在 angular2 cli 中哪里可以找到 systemjs.config.js