为什么 debug_backtrace() 使用这么多内存?

2024-04-11

当尝试跟踪 PHP 中的一些内存问题时,我注意到debug_backtrace(),我在日志代码中调用它,似乎使用了大量内存。

在大多数情况下,以下代码会打印类似的内容0.02 MB。但在一种情况下,它会打印171.85 MB!

$before = memory_get_usage();
$backtrace = debug_backtrace(false);
$after = memory_get_usage();
echo round(($after - $before)/1024/1024, 2)." MB";

我的问题是,这是否意味着debug_backtrace实际上使用了那么多内存吗?或者可能发生其他事情,例如垃圾收集,这会扰乱来自的返回值memory_get_usage?


最有可能的是导致膨胀的对象。尝试通过false到该函数,这样您就不会拉动对象,并且您的痕迹会小得多。

编辑:如果通过false如果您运行的是 PHP 5.3.6+,则不起作用,您可以使用位掩码来限制函数返回的内容。听起来好像你有一个巨大的对象作为参数传递。

http://php.net/manual/en/function.debug-backtrace.php 参考 http://php.net/manual/en/function.debug-backtrace.php

此外,如果您使用 PHP 5.4.0+,他们添加了第二个参数,允许您限制堆栈帧的数量。

编辑2:总计HACK>> 在这里,但是有效...添加一个 try/catch,抛出异常并捕获它,然后转换为字符串或调用异常 getTraceAsString() 以获取完整堆栈。例子:

try {
    throw new Exception('ignore this string');
} catch(Exception $e) {
    /* @var $trace array */
    $trace = $e->getTrace();

    // OR

    /* @var $str string */
    $str = $e->getTraceAsString();
    $e = null;
}

在上面的片段中,您可以使用$trace并构建您自己的输出或仅使用标准异常作为字符串$str。更容易获得堆栈帧输出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 debug_backtrace() 使用这么多内存? 的相关文章

  • PHP 用星号替换所有字符

    假设我有一个字符串形式的密码 password thisisaplaintextpassword 我怎样才能把它变成下面的样子 password 我想通过电子邮件向用户发送他们的帐户详细信息 但不想发送整个内容 Use 字符串重复 http
  • MYSQL 的 Google OAuth 2.0 用户 ID 数据类型

    我正在实施 Google OAuth 2 0 并注意到 Google OAuth 返回的唯一用户 ID 是21位数字长的 我想大整数 20 足以满足这种需求 但我现在看到 Google OAuth 返回的用户 ID 的长度感到困惑 关于我应
  • 使用 md5 加密的 PHP 和 Mysql 查询出现问题

    我使用普通的 php mysql 插入查询并使用 md5 加密密码 这是插入查询 sql mysql query INSERT INTO user username password role approved values usernam
  • PHPExcel下载文件

    我想下载使用 PHPExcel 生成的 Excel 文件 我按照以下代码PHPExcel 强制下载问题 https stackoverflow com questions 26265108 phpexcel force download i
  • 关于加拿大短信网关提供商的建议[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我很好奇 如果我能够接受传入的短信到某个号码 然后将其传递给 PHP 中的服务器端应用程序 会带来多少麻烦 金钱 我最终会通过电子邮件地址发回短信 有
  • 如何计算选择查询的最佳获取大小

    在 JDBC 中 默认获取大小为 10 但我想当我有一百万行时 这不是最佳获取大小 据我所知 获取大小太低会降低性能 但如果获取大小太高也会降低性能 我怎样才能找到最佳尺寸 这对数据库端有影响吗 它会占用大量内存吗 如果您的行很大 请记住
  • Zend IMAP 搜索和过滤器

    我如何使用 Gmail 中的过滤器进行搜索 就像获取带有特定标签的电子邮件列表或来自特定电子邮件地址的邮件列表一样 我无法在文档中找到它 注意 我使用 oAuth 进行身份验证 我希望这与搜索无关 Gmail 上的标签实际上是 从 IMAP
  • Symfony2中如何获取所有post参数? [复制]

    这个问题在这里已经有答案了 我想获取a的所有post参数symfony http symfony com Form I used all parameter this gt get request gt getParameterHolder
  • 使用 php 更改白天和黑夜的背景?

    我正在制作一个 tumblr 页面 我的 html 页面有两种不同的背景 我希望白天背景从早上 7 点到晚上 8 点显示 夜间背景从晚上 8 点到早上 7 点显示 我决定用 php 来做这件事 但对于 php 来说我是个新手 我的朋友给我发
  • 将函数中的会话变量传递给 codeigniter 中的助手

    这就是我正在尝试做的事情 这是控制器中的功能 public function get started if test login this gt session gt all userdata this gt load gt view te
  • 如何以编程方式获取 WooCommerce 中的所有产品?

    我想获取 WooCommerce 中的所有产品数据 产品 sku 名称 价格 库存数量 可用性等 我可以使用 wp query 来做到这一点吗 这样你就可以通过 wp query 获取所有产品 global wpdb all product
  • Composer 用于下载私有 GitHub 存储库

    我无法使用 Composer 下载 github 私人存储库 php composer phar update 我收到以下错误 The https api github com repos company private1 https ap
  • Objective-C:int值无故改变

    Objective C 我需要帮助保留 int 的值 无需我的命令 它就在我身上发生变化 最初的问题是 如何声明和保留 int 这在另一篇文章中得到了满足 Objective C 如何声明和保留 int https stackoverflo
  • 使用PHP套接字发送和接收数据

    我正在尝试通过 PHP 套接字发送和接收数据 一切正常 但是当我尝试发送数据时 PHP 不发送任何内容 Wireshark 告诉我发送的数据长度为 0 我正在使用这段代码
  • 通过JS Laravel访问存储目录

    有没有办法访问storage目录 该目录已经链接到publicJS 中的目录 我正在尝试制作一个上传图片的表单 验证脚本 if request gt hasFile photos marker gt photos request gt ph
  • 如何在html中制作多行类型的文本框?

  • Zend Framework Zend_Form 装饰器: 位于按钮元素内部?

    我有一个像这样创建的按钮元素 submit new Zend Form Element Button submit submit gt setLabel My Button submit gt setDecorators array Vie
  • php下拉菜单人口

    我正在尝试编写一个 php 脚本 该脚本将根据主下拉菜单的选择填充第二个下拉菜单 我想使用 jquery 来完成所有非页面刷新的事情 但我发现现有的所有东西都很难理解和修改 你知道有什么写得很好且易于理解的东西吗 或者可能是现有的教程 下面
  • mysqli bind_param 中的 NULL 是什么类型?

    我正在尝试将参数绑定到 INSERT INTO MySQLi 准备好的语句 如果该变量存在 否则插入 null 然后我知道 type variable i corresponding variable has type integer d
  • PHP 和 NLP:嵌套括号(解析器输出)到数组?

    想要将带有嵌套括号的文本转换为嵌套数组 以下是 NLP 解析器的输出示例 TOP S NP PRP I VP VBP love NP NP DT a JJ big NN bed PP IN of NP NNS roses 原文 我喜欢一大床

随机推荐

  • 无法验证 AzureAD 本机客户端应用程序

    我已经注册了一个 AzureAD 应用程序 它是公共客户端 本机客户端 我在门户中使用 Azure 生成的标准代码 重要的是 static App clientApp PublicClientApplicationBuilder Creat
  • 在Java中,我们可以将一个类分成多个文件吗

    是否有可能使用Java将一个类划分为多个物理文件 不 整个类必须位于 Java 的单个文件中 如果您正在考虑 C 的 部分类型 功能 那么 Java 中没有类似的功能 如果您没有想到 C 请忽略此
  • 带有 rpi 主站和从站的 Profibus [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我的任务是使用 Rpi 和 Rs 485 转换器构建 profibus 主站和从站网络 一个 Rpi 将成为主设备 另一个将成为从设备
  • 无法加载 RSA 公钥

    我正在尝试读取如下所示的 RSA 公钥 但在第 6 行出现异常 java security spec InvalidKeySpecException java security InvalidKeyException IOException
  • 将浮点数转换为整数

    我试图定义 square Integer gt Integer square round 2 我得到
  • XDebug:Windows + Docker + PHPStorm

    我的操作系统是 Windows 10 我通过 boot2docker 映像运行 Docker 我使用的IDE是PHPStorm 我想做的是使用 XDebug 进行调试 但我没有让它运行 我搜索了网络并尝试了我找到的示例 但没有任何帮助 有相
  • 我收到来自 Retrofit Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $ 的响应错误

    我看了几个答案 我遗漏了一些东西 还有没有办法在 Retrofit 处理之前查看数据 这是代码 extends Activity implements Callback
  • Celery 任务状态取决于 CELERY_TASK_RESULT_EXPIRES

    据我所知 任务状态完全取决于 CELERY TASK RESULT EXPIRES 设置的值 如果我在任务完成执行后检查此间隔内的任务状态 则返回的状态为 AsyncResult task id state 是正确的 如果没有 状态将不会更
  • 在 C - linux 中强制使用原始串行模式

    不知道如何表述标题 但我想做的是用我的 Linux PC 测试我的微控制器 以确保数据正确 经过几个小时的搜索 我发现 stty 命令可以更改通过串行端口管理数据的方式 并且事实证明 默认情况下 如果从端口接收到 xon 或 xoff 字符
  • Spring集成流程的优雅关闭

    我从 spring 集成监控示例中了解到https github com spring projects spring integration samples tree master intermediate monitoring http
  • 有没有一种方法可以捕获异常而无需创建变量?

    在 PHP 中 我有时会使用 try catch 捕获一些异常 try catch Exception e Nothing this is a test that an exception is thrown 通过这种代码 我最终得到了变量
  • 修改存储在变量中的innerHTML不起作用

    我想将页面的显示区域存储在变量中 display在代码中 即innerHTMLdisplaydiv 在我的示例中 但是当我这样做时 我根本无法修改其内容 function stored var display document getEle
  • TEdit 中的 CapsLock 密码消息在视觉上因 VCL 样式而失败

    使用 VCL 样式时 在 TEdit 中使用密码时的 CapsLock 消息会出现错误 这是没有样式的样子 VCL 样式打开 该消息是葡萄牙语的 但我认为这不重要 在 Delphi Seattle 23 0 21418 4207 带有更新
  • 为什么Python中'=='出现在'in'之前? [复制]

    这个问题在这里已经有答案了 下面的代码输出 False 而根据 Python 操作顺序 它应该输出 True 顺序应该是 gt 而不是相反 为什么 出现在 in 之前 y 33 3 in y True Output False 现有的答案提
  • 比较两个字符串是否相等的超级快速方法

    显然 在Python中检查两个字符串是否相等你可以这样做 hello word hello world 但是 如果您要比较很长的字符串 超过 100 万个字符 怎么办 python 中是否有内置方法或任何库可以更快地完成此操作 也许利用卡普
  • 过滤器有问题

    我有课程搜索一切正常 除了 当 r gt price它返回所有课程 而不是最后搜索的课程 我需要捕获最后一个 时间 然后按它过滤价格 我怎样才能做到这一点 courses Course when r gt mainCat function
  • 用户订单(买入/卖出)的股票期权价格变化

    继这个问题生成虚构的股票期权价格变化 https stackoverflow com questions 9353938 generate a fictitious stock option price variation 我希望模拟价格变
  • MySQL 命令行中的 Unicode 转义序列

    简洁版本 可以使用哪种转义序列在命令行 mysql 中搜索 unicode 字符 长版 我正在寻找一种方法 从命令行在 mysql 中搜索包含 unicode 序列 U 200B 的记录的列 我不知道该使用哪种逃避方式 我已经尝试过并且x2
  • 让表示层(JSF)处理来自服务层(EJB)的业务异常

    更新提供的实体的 EJB 方法 使用 CMT Override SuppressWarnings unchecked public boolean update Entity entity throws OptimisticLockExce
  • 为什么 debug_backtrace() 使用这么多内存?

    当尝试跟踪 PHP 中的一些内存问题时 我注意到debug backtrace 我在日志代码中调用它 似乎使用了大量内存 在大多数情况下 以下代码会打印类似的内容0 02 MB 但在一种情况下 它会打印171 85 MB before me