nginx检索100万行时HTTP错误500


nginx HTTP Error 500 when retrieving 1 Million rows

使用nginx 1.7 &PHP (Laravel框架)从PostgreSQL数据库检索100多万行,导致错误500在10秒内显示。

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

我已经设置了一些超时时间更长,并重新加载nginx,但它不工作。哪些设置将防止此超时?

sites-enabled

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;
}

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

这个看起来不像超时,这应该使nginx发出504 Gateway Timeout错误。HTTP错误500表示实际上存在错误,即:

    PHP (Laravel)内存不足
  • PostgreSQL连接被终止
  • FastCGI进程放弃幽灵

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

直接加载页面,而不从nginx传递,无论如何应该给出一个更有信息的错误,如果您不想或不能检查日志。

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

如果是这样的话,你可能可以通过允许php.ini中PHP进程占用更高的内存来快速解决这个问题;或者更好的做法是,重新设计流程,使其不会占用那么多数据(您肯定不会显示100万行;