0

使用 nginx 1.7 和 PHP(Laravel 框架)从 PostgreSQL 数据库中检索 1+ 百万行会导致错误 500 在 10 秒内显示。

HTTP Error 500 (Internal Server Error): An unexpected condition was encountered while the server was attempting to fulfill the request.

我已经将一些超时设置为更长并重新加载了 nginx,但它不起作用。哪些设置可以防止这种超时?

启用站点

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_read_timeout 6000;
    fastcgi_send_timeout 6000;
    client_body_timeout 6000;
    send_timeout 6000;
    proxy_read_timeout 6000;
}
4

1 回答 1

1

为了解释我有点神秘的评论,并提供一个可能的答案:

看起来不像 timeout,这应该会使nginxissue504 Gateway Timeout出错。HTTP Error 500 表示实际上存在错误,即:

  • PHP(Laravel)内存不足
  • PostgreSQL 连接被中止
  • FastCGI进程放弃了ghost

所以你有三个地方可以检查:fastcgi 日志,Laravel/PHP 错误日志,可能还有 PostgreSQL(不太可能,因为 PostgreSQL 不应该有处理数百万行的问题 - 但可能存在内存问题)。

直接加载页面,而不通过 from nginx,无论如何,如果您不想或不能检查日志,应该会给出更多信息错误。

我的钱将用于 PHP 层中的内存错误,或者失败,用于 FastCGI 中的资源(内存和/或 CPU)耗尽问题。

如果是这样,您可能可以通过允许 PHP 进程占用更高的内存来快速解决问题php.ini;或者更好的是,重新设计流程,使其不接收太多数据(您肯定不会显示一百万行;也许您正在 PHP 中进行一些可以在 PostgreSQL 级别更好地完成的处理?)。

于 2013-04-19T20:53:19.120 回答