【问题标题】:PHP (or MySQL) crash when retrieving a big database record (~5MB)检索大型数据库记录 (~5MB) 时 PHP(或 MySQL)崩溃
【发布时间】:2011-06-30 17:09:49
【问题描述】:

它不显示任何错误,只是一个空白页。我在调用函数检索记录之前尝试了 die('test') 并且它确实做到了,但是当我在检索行函数之后放置 die('test') 时,我得到的只是一个空页面(on chrome it says this: Error 324 (net::ERR_EMPTY_RESPONSE): The server closed the connection without sending any data.)

..我试过(128M、-1、64M等)

ini_set('memory_limit', -1);

没有运气。我正在使用 mysqli 来检索记录和一个简单的查询,例如“从 tblBackup 中选择数据”(数据库中只有 1 条记录)

有什么帮助吗?

提前致谢

更新: 我跟踪了 apache 错误日志,在尝试加载页面时得到了这个,

[Thu Jun 30 13:47:37 2011] [notice] child pid 25405 exit signal Segmentation fault (11)

【问题讨论】:

  • 查找 mysql 和 web 服务器日志,从 php.ini 启用错误报告和错误日志记录。另请注意,您不能在运行时设置 memory_limit。
  • @eyazici memory_limit 可以在运行时更改PHP_INI_ALL
  • 好的,MySQL 服务器日志显示没有错误,但我跟踪了 apache 日志并收到此错误 @eyazici [Thu Jun 30 13:47:37 2011] [notice] child pid 25405 exit signal Segmentation故障 (11)

标签: php memory pdo mysqli


【解决方案1】:

检查 php.ini 变量的执行时间。听起来 PHP 可能会超时。

max_execution_time =3000
max_input_time = 6000

此外,您可以在 .ini 级别完成此操作,但您可以添加它以获取 PHP 错误。将这些放在文件的顶部:

error_reporting(E_ALL);
ini_set('display_errors', '1');

【讨论】:

  • 还是一样的东西...我怀疑它的时间限制,因为空白页面会立即出现,而不是等待 30 秒左右。
【解决方案2】:

max_allowed_packet 的客户端和服务器设置是什么?如果它小于您尝试发送的 ~5MB blob,则连接将被终止。

【讨论】:

  • MySQLd 是 16MB,我把它改成了 32MB。依然没有。我将如何更改php上mysql的最大数据包?
  • max_packet 用于 mysql 客户端服务器通信。 PHP 与它没有任何关系,因为 PHP 只是与 mysql api 库对话,然后由它执行连接。
  • 那么,mysql api(我假设是pdo_mysql)没有最大数据包限制?
  • 我不认为这是可以即时更改的,但您可以随时尝试。
【解决方案3】:

嗯,去过那里,伙计。但归根结底:这是处理查询的好方法吗?如果你有很多结果,那么 LIMIT 他们下来..也许与分页?

因为是的,您可以将限制设置得更高,但从长远来看……这真的是最有效的方法吗?

【讨论】:

  • 我表中只有一条记录,不需要分页。
  • 那一定是缓存什么的吧?不然怎么这么大?
【解决方案4】:

在编译 php 时,我的 --with-pdo-mysql=[DIR] 标志似乎导致了这个问题。我删除了 [DIR] 并将其留空。问题消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2011-07-02
    • 2015-03-11
    • 2013-03-05
    • 1970-01-01
    相关资源
    最近更新 更多