Php-Fpm

FastCGI:“與伺服器通信中斷:讀取失敗”僅針對一個特定文件

  • June 15, 2015

相關問題: FastCGI 和 Apache 500 間歇性錯誤

該解決方案對我不起作用。


問題:

我有一個 Laravel 5.1 應用程序(在其他伺服器上的生產中沒有任何問題)在帶有Apache 2.4.7和 PHP的全新Ubuntu 14.04 伺服器上通過****PHP-FPM執行。

只要應用程序中未呼叫某個文件,一切正常:

$compiledPath = __DIR__.'/cache/compiled.php';

if (file_exists($compiledPath)) {
   require $compiledPath; // this causes a "500 Internal Server Error"
}

這是一個由框架本身自動創建的特定於 Laravel 的文件,以加快速度(所以這不是我的程式碼中的錯誤),它確實存在並且我擁有完全的訪問權限。它的大小約為 600kB。當我刪除它時,一切正常。但是當我告訴 Laravel 再次創建它,然後點擊應用程序的任何路由時,我得到一個“500 Internal Server Error”,並帶有以下日誌條目:

$$ fastcgi:error $$ $$ pid 14334 $$(104) 對等方重置連接:$$ client xxx.xxx.xxx.xxx:41395 $$FastCGI:與伺服器“/var/www/clients/client1/web1/cgi-bin/php5-fcgi-yyy.yyy.yyy.yyy-80-domain.com”通信中止:讀取失敗 $$ fastcgi:error $$ $$ pid 14334 $$ $$ client xxx.xxx.xxx.xxx:41395 $$FastCGI:從伺服器“/var/www/clients/client1/web1/cgi-bin/php5-fcgi-yyy.yyy.yyy.yyy-80-domain.com”收到不完整的標頭(0字節) $$ fastcgi:error $$ $$ pid 14334 $$(104) 對等方重置連接:$$ client xxx.xxx.xxx.xxx:41395 $$FastCGI:與伺服器“/var/www/clients/client1/web1/cgi-bin/php5-fcgi-yyy.yyy.yyy.yyy-80-domain.com”通信中止:讀取失敗 $$ fastcgi:error $$ $$ pid 14334 $$ $$ client xxx.xxx.xxx.xxx:41395 $$FastCGI:從伺服器“/var/www/clients/client1/web1/cgi-bin/php5-fcgi-yyy.yyy.yyy.yyy-80-domain.com”收到不完整的標頭(0字節)

我試過的:

我嘗試了上述相關問題中的解決方案,這也代表了我能找到的有關此問題的大多數其他建議:使用常見的 PHP-FPM 設置以分配更多資源。接受的答案還提到了完全放棄 FastCGI 的選項,但我不想去那裡。所以我玩弄了這些價值觀,但沒有運氣。

伺服器上沒有任何負載,因為我是唯一使用它的人,所以我真的懷疑這是可用資源的問題(這是一個具有 12GB RAM 的 VPS)。**它可能與文件大小有關嗎?**它是唯一一個這麼大的 PHP 文件。

我可以在具有相同配置的 2 台不同伺服器上重現該問題。它沒有發生在帶有 FastCGI 的 Apache 2.2 的 Ubuntu 12.04 伺服器上。

我目前的配置:

PHP-FPM:

pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 5
pm.max_requests = 0

<IfModule mod_fastcgi.c>
   ...
   Alias /php5-fcgi /var/www/....
   FastCgiExternalServer /var/www/.... -idle-timeout 300 -socket /var/lib/php5-fpm/web1.sock -pass-header Authorization
</IfModule>

php.ini

memory_limit = 512M
output_buffering = on

如果 PHP 僅在特定的源文件上失敗,最可能的原因是某些 PHP 程式碼加速器(操作碼記憶體)如 Xcache、APC 或 eAccelerator 存在文件問題。這可能是由於加速器或 PHP 本身中的錯誤。

您可以嘗試通過 PHP 命令行界面(php-cli命令)執行您的腳本,因為 PHP CLI 不使用任何加速器。

引用自:https://serverfault.com/questions/699053