各位大神好,
最近在研究 nginx 效能問題。
搜尋一下 google 大部分都是在討論 nginx connection 問題。
但有看沒有懂。
參考項目:
Nginx高并发配置
ginx并发优化.pdf
Nginx Connection 不夠用 的參數調整
像是這個worker_processes 8;
假設我是把機器開在 AWS t2.medium(2vCPU,4MEM)
我看很多人都說這個 worker processes 的是不會超過 vCPU, 多設定無意義,
我如果是設定說 worker_processes 2;
這樣的話我的伺服器全部的 CPU 都給 nginx worker ,
那其他系統的 processes 不就不用工作了嗎?
連線參數我看很多都設定 1024worker_connections 1024;
所以我設定worker_processes 2;
worker_connections 1024;
我可以有 2048 個連線數,
但是知道這樣的算法後,我還是不知道有甚麼意義
因為假設我是 LAMP 的程式。
我用 ab -n 10000 http://example.com
我的理解是 ab 這樣會有 10000個連線同時進來,
就..沒有然後了,我怎麼知道我 nginx 這樣夠不夠,
還是我機器要大一點。
而且,這個模擬 10000 人同時間打開我的網站。
像是網頁有動態資源(php 運算後寫入資料庫)
只測試 ab -n 10000 http://example.com
就沒有把消耗資源的服務考慮進來,這樣測試是不是就失準了
關於 nginx 併發看了還是不是很能理解是怎麼運作的。
我的理解是自己的電腦會開一個亂數 port 到主機端client:random_port -> server:80
以前學長是說開80就像是開個一個櫃台讓大家來訪問。
可是如果有10000個人同時擠進 80櫃台。
櫃檯也是要一個一個處理(排隊)
我的想像是我就連過去網站,死都不關掉,這樣下一個人就不能訪問80,就會出現錯誤。
但這很明顯是錯誤,隨便在 aws 安裝個 nginx 就會有一堆連線進來,
可以用 net -ant
去看。
還是其實不能用櫃台排隊的方式去想,
我看很多書都會寫說,伺服器能夠乘載 100000連線數,11購物節的時候我們每秒乘載 578 連線,然後就會 show top 數據,可是都沒有解釋是怎麼算出來,以及 top 它們到底參照那個數值判斷到底穩不穩定,不知道有沒有大大可以教學怎麼算出來,以及看甚麼東西。
1:
正常來說也關系到程式本身語法寫的處理速度問題
如果本身PROCESS 一直在工作處理
那就真的會死機
所以會有個超過多少時間就結束的機制
CPU處理程序數也要買多一點
2:
個人覺的要分二種來說
-->同時進站連線人數
-->負載人數
這很難有絕對可以很凖的
通常也只是大概
3:
參數本身也有TIMEOUTE的指令
代碼都要互相配合
才不會造成這樣的狀況
4:
我都是直接用計算連線埠數 80跟443
我只能說這門課水很深也很煩
只能說實戰經驗真的會大於理論值
在單1機器的 LAMP 的架構上。你該考慮的是 php 跟 mysql 能夠同時撐多少人而不爆記憶體。nginx 它只負責靜態資源的處理,它不會是你整個網站的瓶頸。
吃資源的都是php mysql。如果你想架1個超大網站,你要作的至少是 auto scaling 跟 db cluster , nosql 的cache機制等。