【发布时间】: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