我有一个脚本,可以对DB中的某些行进行大量处理(很多行)。该脚本使用了大量对象和一些内部缓存机制。
在某些时候,我正在释放所有使用过的缓存,以避免仅为缓存的项目占用所有可用的RAM,但使用的内存不会减少。
我已经使用memory_get_usage(true)
来确定脚本占用了多少RAM,但我没有想法如何检测哪些对象仍然在RAM中并且仍在占用内存。
简单的解决方案是返回所有对象,并确保没有变量仍然存在并指向它们,并且所有内部缓存实际上都是免费的并且测试和测试再次测试,但我< strong>寻找工具或函数调用,它会告诉我“Z类中的变量Y有90%的RAM”,而不必知道并弄乱我使用的所有对象的内部结构这个脚本。
答案 0 :(得分:2)
为什么不分析您的脚本?
在启用了分析器的情况下使用xdebug并调查cachegrind文件的内容。
在此处查看更多内容:http://www.xdebug.org/docs/profiler
更新:您可以通过将xdebug.show_mem_delta参数与xdebug.trace_format一起设置为1来获取更多与内存相关的信息,以便在简单的html中获取内存使用情况。
检查此http://xdebug.org/docs/execution_trace和此http://derickrethans.nl/xdebug-and-tracing-memory-usage.html以获得一些想法。