【问题标题】:PDOExeption SQLSTATE[HY001] Unable to allocate sufficient memoryPDOExeption SQLSTATE[HY001] 无法分配足够的内存
【发布时间】:2017-04-04 21:31:38
【问题描述】:

当我从 php-fpm 运行以下代码时:

$connect = new PDO("dblib:host=mssql.dev.gm.local;dbname=GeoData","username","password");

try{
    $s = $connect->query('[RU].GetTownInfo 4368');
    var_dump($s->fetch());
}catch (Exception $e){
    var_dump($e->getMessage());
}

我得到异常:

PDOExeption SQLSTATE[HY001] 无法分配足够的内存

但是当我从 php 命令行运行相同的代码时,我没有这样的问题。

可能是什么问题?

我使用 nginx proxy_pass 到后端(php-fpm)。

要连接到 MS SQL Server,我使用 Dblib (freetds)。 OpenVZ、Nginx 和 Php-fpm 在一台机器上的所有工作都是不同的虚拟机。

命令行和上游的php-fpm配置是一样的。

【问题讨论】:

  • 问题大概来自于php-sql扩展。检查 php-fpm.ini 和 php-cli.ini 之间的配置差异
  • 也许增加了 php 内存限制? ini_set('memory_limit','-1');
  • 您还可以在运行脚本时监控服务器上的内存进程。也许您实际上已经耗尽了内存和交换空间。
  • 更改 memory_limit 没有帮助。有高达 8Gb 的可用内存。
  • 错误信息非常容易误导。如果您查看有关 ODBC 的 sybase 和 Microsoft 文档,则异常可能是由有问题的 ODBC 驱动程序引起的,试图获取不可用的对象,查询不可用的东西......它不需要与内存有关。尝试更新您的 ODBC 和库。

标签: php sql-server php-7 freetds openvz


【解决方案1】:

系统告诉你问题对吗?

PDOExeption SQLSTATE[HY001] 无法分配足够的内存

所以你可以尝试通过更改 php.ini 中的限制来给 php 更多内存:

memory_limit = 128M

【讨论】:

  • memory_limit 并不能神奇地解决所有内存错误。提高它只是解决了它自己引起的问题,顺便说一下,这些问题都被明确地报告过。
  • 此外,我很确定 PHP (-scripts) 的内存限制与第三方扩展所消耗的内存无关。
猜你喜欢
  • 2021-03-31
  • 2021-06-12
  • 2023-04-05
  • 2016-06-19
  • 2020-05-05
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多