首先要明確一點的是502是怎麼出現的,為什麼會出現502呢?一般而言,出現502的錯誤是因為php-cgi連接數不夠導致的。舉個例子:php-cgi開10個進程,前端發20個請求,每個請求的腳本都sleep100s,那麼必然有至多10個請求會出現502錯誤。因此,出現502是因為php進程不夠用了, ...
首先要明確一點的是502是怎麼出現的,為什麼會出現502呢?
一般而言,出現502的錯誤是因為php-cgi連接數不夠導致的。
舉個例子:
php-cgi開10個進程,前端發20個請求,每個請求的腳本都sleep100s,那麼必然有至多10個請求會出現502錯誤。因此,出現502是因為php進程不夠用了,和nginx沒有多大關係。
如果非要是找出這種502錯誤的比例,需要綜合考慮:
1後端php-cgi的進程數,
2php-cgi對請求的處理時間,
3nginx的併發量,
要解決502也很容易,加大php-cgi的進程數。這裡又三種方式:
1增加nginx的upstream,其中upstream中為php-cgi的地址;
2利用nginx作為反向代理,分支法解決併發量;
3增加php-cgi的進程數,(這裡會受到機器資源的限制,因此,也並不能無限增加)
問:php-cgi怎麼開十個進程?求回答,謝謝啊
追答:目前而言,php-cgi都是通過php-fpm去管理的。
在php/etc/php-fpm.conf文件中,有設置php進程數目的選項。
項設置可以參考php-fpm.conf中的說明。每個配置項都有詳細的說明。
追問:開啟apache就會在任務管理器中看到fast-cgi線程了?一個fast-cgi線程是說在同一時刻只能處理一個客戶端的網頁請求嗎?求回答
追答:是的,一個fast-cgi進程在同一時刻只能響應一個用戶請求。其他的用戶請求都會被放到一個隊列裡面。
1、為什麼Nginx的性能要比Apache高得多?
1 這得益於Nginx使用了最新的epoll(Linux 2.6內核)和kqueue(freebsd)網路I/O模型,而Apache則使用的是傳統的select模型。目前Linux下能夠承受高併發訪問的Squid、Memcached都採用的是epoll網路I/O模型。 2 處理大量的連接的讀寫,Apache所採用的select網路I/O模型非常低效。下麵用一個比喻來解析Apache採用的select模型和Nginx採用的epoll模型進行之間的區別: 3 假設你在大學讀書,住的宿舍樓有很多間房間,你的朋友要來找你。select版宿管大媽就會帶著你的朋友挨個房間去找,直到找到你為止。而epoll版宿管大媽會先記下每位同學的房間號,你的朋友來時,只需告訴你的朋友你住在哪個房間即可,不用親自帶著你的朋友滿大樓找人。如果來了10000個人,都要找自己住這棟樓的同學時,select版和epoll版宿管大媽,誰的效率更高,不言自明。同理,在高併發伺服器中,輪詢I/O是最耗時間的操作之一,select和epoll的性能誰的性能更高,同樣十分明瞭。
2、為什麼會出現502錯誤呢?
nginx出現502有很多原因,但大部分原因可以歸結為資源數量不夠用,也就是說後端php-fpm處理有問題,nginx將正確的客戶端請求發給了後端的php-fpm進程,但是因為php-fpm進程的問題導致不能正確解析php代碼,最終返回給了客戶端502錯誤。優化php-fpm,優化代碼,加大記憶體才是解決502的根源。
3、10000併發的話,nginx的表現怎麼樣?
2009年9月3日下午2:30,金山游戲《劍俠情緣網路版叄》臨時維護1小時,大量玩家上官網,論壇、評論、客服等動態應用Nginx伺服器集群,每台伺服器的Nginx活動連接數達到2.8萬。