PHP 中调试内存泄漏/使用错误的工具/技术

发布于 2024-09-11 16:12:19 字数 647 浏览 7 评论 0原文

我有一个命令行脚本,它通过循环运行文件的 array() ,并使用文件名作为参数来调用辅助对象上的方法。

每次运行脚本时,PHP 的 memory_get_usage 都会报告越来越大的数字,

53294264
57019624
61374624
65699176
70230600
75157152
79900392
84630472
89359264
94300016
100031176
105202448
110360808
115777528
121146976
126784824
132366952

直到我出错并显示“

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted

很明显,某些东西正在泄漏内存,或者不断添加某种全局/静态存储区域”。在 PHP 中调试此类错误的最佳方法是什么? PHP 中是否存在无意中发生这种情况的常见情况? xDebug 是否有一些神奇的选项可以帮助我查明这一点?其他工具?

我想出的最好的办法是跟踪执行链,并通过调用 memory_get_usage() 来乱七八糟地调用代码库,直到我查明确切的问题,但这似乎是一种乏味且低效的方法。

I've got a command line script that is running an array() of files through a loop, and using the file name as an argument to call a method on a helper object.

Each run through the script, PHP's memory_get_usage reports a larger and larger number

53294264
57019624
61374624
65699176
70230600
75157152
79900392
84630472
89359264
94300016
100031176
105202448
110360808
115777528
121146976
126784824
132366952

until I error out with a

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted

It's clear that something is leaking memory, or some sort of global/static storage area keeps being added to. What's the best way to debug this kind of error in PHP? Are there common situations where this occurs inadvertently in PHP? Does xDebug have some magic options that can help me pinpoint this? Other tools?

The best I've come up with is following the chain of execution and littering the codebase with calls to memory_get_usage() until I pinpoint the exact problem, but that seems like a tedious and inefficient approach.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你怎么这么可爱啊 2024-09-18 16:12:19

看起来 Facebook 的 xhprof 提供了 函数调用级别的内存分析

(我没用过,但是很想用……)

It looks like Facebook's xhprof provides memory profiling at the function call level.

(I have never used it, but really want to...)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文