2016-07-24 112 views
1

讓我先解釋一下情況,我有一個64 GB RAM的服務器& 20核心與40GB(SSD)。我有大約2000個併發用戶Nginx和PHP-FPM 502錯誤的網關錯誤

1個星期前,我使用Apache的PHP 7,但CPU是80%有時高達101%,這是因爲巨大的SQL插入後,從Apache轉換爲Nginx,MySql MongoDB 。 CPU是大約8%。

我現在的問題是Nginx的很多次返回502錯誤網關的響應,我找了一些答案,但沒有幫助我的人,但是當我改變FPM插座端口listen = /var/run/php5-fpm.socklisten = 127.0.0.1:9000 ngnix總是返回502,我可以不知道是什麼問題。

回答

0

你的服務器是功能強大,足以應付> 500 000要求每天應用程序(如果它是明智的書面)。

問題是因爲PHP-FPM不能有更多的子進程來處理更多的請求。

在apache中,它自動以額外的apache進程啓動。

但是Nginx + PHP-FPM給了你自由如何處理這種情況。

只要改變你的FPM池的conf:​​(或任何你使用)

確保它有這樣的內容:

pm = static 
pm.max_children = 4096 
pm.process_idle_timeout = 10s 
pm.max_requests = 32 

,然後重新啓動PHP FPM

還編輯nginx.conf,使確定它有這個領域頂部:

user http; 
worker_processes auto; 

events { 
    worker_connections 4096; 
    multi_accept on; 
    use epoll; 
} 



p.s.請不要將listen屬性更改爲ip:port - 套接字更快,因爲它在ip:port中通過ip和端口創建網絡連接,但是在套接字版本中它只是打開.sock「文件」。

p.s.不要修改fastcgi_buffers等指令,它不會修復壞的網關問題,因爲php-fpm過程較少。

在我的服務器,它的默認:

fastcgi_buffers 32 1024k; 
fastcgi_buffer_size 1024k; 


附:禁用不必要的日誌記錄(nginx.conf)不要讓你的磁盤驅動器有更多的IO負載:

access_log off; 
error_log /var/log/nginx/error.log crit; 

如果你需要監控使用newrelic和監視你的服務器的網絡,CPU,MEM活動

+1

感謝這個偉大的回答:) –

+0

它是如何有益的!樂意幫助(: – num8er

+1

實際上它幫助我允許更多的併發請求..並且我將項目的特定部分從laravel移動到phalcon ..現在它工作得很好 –

-1

這種變化將工作:Nginx的配置文件/etc/nginx/nginx.conf:在HTTP下部分的下方添加在nginx.conf文件

HTTP

{

fastcgi_buffers 8 16K ;

fastcgi_buffer_size 32k;

}