【问题标题】:how to debug out of memory issues如何调试内存不足问题
【发布时间】:2012-12-16 04:00:28
【问题描述】:

嗨 我有一个脚本,它返回存储在 mysql 表中的所有记录。这个脚本在我的 xampp 服务器上运行得很好,它有一个标准的 128MB 内存限制。

致命错误:第 37 行 /websites/LinuxPackage02/nw/cc/_u/nwcc-uk.org/public_html/code/Article.php 中的内存不足(已分配 524288)(试图分配 4294967294 字节)

但是当它上传到 web fusions myserverworld 平台时,它会崩溃。我将如何调试这样的问题?为什么要分配 4GB 内存?奇怪的是,我的开发服务器只有 2GB,怎么会分配 4。

  public function getActivity($id,$language='ch')
    {

    $mysqli = new Database();
        $mysqli->connect();

    $mysqli->query("SET character_set_results=utf8");   
    $sql = ($language == 'ch') ? 'SELECT id,title,text,date,author FROM article_chinese WHERE id=?': 'SELECT id,title,text,date,author FROM article_english WHERE id=?';
      if ($stmt = $mysqli->prepare("$sql")) {
          $stmt->bind_param("i", $id);
              /* execute query */
          $stmt->execute();

          /* bind result variables */
          $stmt->bind_result($id,$title,$text,$date,$author);

          /* fetch value */
          $stmt->fetch();
          $results = array($id,$title,$text,$date,$author);
          $stmt->close();
          $mysqli->close();
          return $results;
    /* close statement */


      }
    }

【问题讨论】:

    标签: php


    【解决方案1】:

    它试图准确分配 4GB (4294967294/1024/1024/1024 =4) 内存的事实令人怀疑。 Article.php 中的第 37 行周围是什么,它试图从数据库中获取多少行?

    【讨论】:

    • 有问题的函数在上面。脚本崩溃并尝试绑定结果。它只应该从数据库中获取一行!!!!那确实是非常严重的错误。对此的任何启示都将受到极大的欢迎。
    • 我现在已经通过在绑定前存储结果来解决这个问题。 mysqli 这里缺少一些基本的东西吗?存储结果有什么重要的地方可以减少分配的内存?
    【解决方案2】:

    我偶尔也会遇到同样的问题,我在 php.net 上偶然发现了这篇文章:

    andrey 在 php dot net 07-Oct-2005 12:38

    如果您选择 LOB,请使用以下执行顺序,否则您将面临风险 mysqli分配更多实际使用的内存

    1)prepare() 2)execute() 3)store_result() 4)bind_result()

    如果你跳过 3) 或者交换 3) 和 4) 那么 mysqli 将分配内存 列的最大长度,对于 tinyblob 为 255,64k 对于 blob(还可以),对于 MEDIUMBLOB 来说是 16MByte - 很多,对于 4G LONGBLOB(如果你有这么多的内存很好)。使用这个的查询 有 LOB 时订购会慢一点,但这是没有的价格 几秒钟后内存耗尽。

    这解释了为什么它试图分配这么多内存;我猜你的一个领域是一个blob?那么解决方案(正如你自己写的那样)是在绑定结果之前使用store_result()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      • 2013-08-07
      • 2015-04-15
      • 2019-11-01
      • 1970-01-01
      相关资源
      最近更新 更多