為什麽Nginx的性能要比Apache高得多?
這得益於Nginx使用了最新的epoll(Linux?2.6內核)和kqueue(freebsd)網絡I/O模型,而Apache則使用的是傳統的select模型。目前Linux下能夠承受高並發訪問的Squid、Memcached都采用的是epoll網絡I/O模型。處理大量的連接的讀寫,Apache所采用的select網絡I/O模型非常低效。下面用壹個比喻來解析Apache采用的select模型和Nginx采用的epoll模型進行之間的區別:
假設妳在大學讀書,住的宿舍樓有很多間房間,妳的朋友要來找妳。select版宿管大媽就會帶著妳的朋友挨個房間去找,直到找到妳為止。而epoll版宿管大媽會先記下每位同學的房間號,妳的朋友來時,只需告訴妳的朋友妳住在哪個房間即可,不用親自帶著妳的朋友滿大樓找人。如果來了10000個人,都要找自己住這棟樓的同學時,select版和epoll版宿管大媽,誰的效率更高,不言自明。同理,在高並發服務器中,輪詢I/O是最耗時間的操作之壹,select和epoll的性能誰的性能更高,同樣十分明了。
為什麽會出現502錯誤呢?
nginx出現502有很多原因,但大部分原因可以歸結為資源數量不夠用,也就是說後端php-fpm處理有問題,nginx將正確的客戶端請求發給了後端的php-fpm進程,但是因為php-fpm進程的問題導致不能正確解析php代碼,最終返回給了客戶端502錯誤。優化php-fpm,優化代碼,加大內存才是解決502的根源。10000並發的話,nginx的表現怎麽樣?
2009年9月3日下午2:30,金山遊戲《劍俠情緣網絡版三》臨時維護1小時,大量玩家上官網,論壇、評論、客服等動態應用Nginx服務器集群,每臺服務器的Nginx活動連接數達到2.8萬。