检索1百万行时,nginx HTTP错误500

时间:2013-04-19 20:39:56

标签: php postgresql nginx laravel laravel-4

使用nginx 1.7&从PostgreSQL数据库中检索超过100万行的PHP(Laravel框架)导致错误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;
}

1 个答案:

答案 0 :(得分:1)

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

看起来不像是超时,这会导致nginx发出504 Gateway Timeout错误。 HTTP错误500意味着实际上存在错误,即:

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

所以,你有三个地方进行检查:FastCGI的日志中,Laravel / PHP错误日志,并可能PostgreSQL的(不太可能,因为PostgreSQL的不应该处理数百万行的问题 - 但也许有记忆的问题)

如果您不想或不能检查日志,直接加载页面,而不是从nginx传递,应该提供更多信息,如果您不想或不能检查日志。

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

如果是这样,你可以通过在php.ini中为PHP进程提供更高的内存空间来快速解决问题。或者更好的是,重新设计流程以便它不会占用太多数据(你肯定不会显示一百万行;也许你在PHP中做了一些在PostgreSQL级别可以做得更好的处理?)。 / p>