nginx 效能優化
阿新 • • 發佈:2020-09-10
Nginx優化
一、效能優化概述
1.我們需要了解
1、首先需要了解我們當前系統的結構和瓶頸,瞭解當前使用的是什麼,執行的是什麼業務,都有哪些服務,瞭解每個服務最大能支撐多少併發。比如nginx作為靜態資源服務併發是多少,最高瓶頸在哪裡,能支援多少qps(每秒查詢率)的訪問請求,那我們怎麼得出這組系統結構瓶頸呢,比如top檢視系統的CPU負載、記憶體使用率、總得執行程序等,也可以通過日誌去分析請求的情況,當然也可以通過我們前面介紹到的stub_status模組檢視當前的連線情況,也可以對線上的業務進行壓力測試(低峰期),去了解當前這套系統能承擔多少的請求和併發,已做好響應的評估。這個是我們做效能優化最先考慮的地方。 2、其次我們需要了解業務模式,雖然我們是做效能優化,但每一個性能的優化都是為業務所提供的服務的,我們需要了解每個業務介面的型別,比如:電商網站中的搶購模式,這種情況下面,平時沒什麼流量,但到了搶購時間流量會突增。 我們還需要了解系統層次化的結構,比如:我們使用nginx做的是代理、還是動靜分離、還是後端直接服務使用者,那麼這個就需要我們對每一層做好相應的梳理。以便更好的服務業務。 3、最後我們需要考慮效能與安全,往往注重了效能,但是忽略了安全。往往過於注重安全,對效能又會產生影響。比如:我們在設計防火牆功能時,檢測過於嚴密,這樣就會給效能帶來影響。那麼如果對於效能完全追求,卻不顧服務的安全,這個也會造成很大的隱患,所以需要評估好兩者的關係,把握好兩者的孰重孰輕。以及整體的相關性,權衡好對應的點。 1.需要了解我們當前系統的結構和瓶頸 2.我們需要了解業務模式 3.我們還需要了解系統層次化的結構 4.需要考慮效能與安全
2.從那些方面入手
OSI七層模型:物理層,資料鏈路層,網路層,傳輸層,會話層,表示層,應用層
1.硬體:磁碟,記憶體,CPU
2.網路:頻寬,網速,丟包,延遲
3.系統:檔案描述符(檔案控制代碼數)
4.應用:服務與服務之間保持長連線
5.服務:nginx、MySQL、php
二、壓力測試工具 ab
1.安裝ab工具
#檢視命令所在包
[root@web02 /server]# yum provides ab
#安裝ab
[root@web02 /server]# yum install -y httpd-tools
2.工具使用
[root@web01 ~]# ab -n 200 -c 2 http://linux.try.com/ -n 請求次數 -c 請求的併發數 -k 保持長連線 #語法 Usage: ab [options] [http[s]://]hostname[:port]/path
3.配置網站
[root@web01 ~]# vim /etc/nginx/conf.d/t_file.conf server { listen 80; server_name linux.try.com; location / { root /code/try; #index index.html index.htm; try_files $uri $uri/ @java; } location @java { proxy_pass http://172.16.1.8:8080; } } #配置 hosts [root@web01 ~]# vim /etc/hosts 10.0.0.7 linux.try.com
4.ab測試nginx請求靜態頁
[root@web01 ~]# ab -n 20000 -c 20 http://linux.try.com/
Concurrency Level: 20
Time taken for tests: 1.639 seconds
Complete requests: 20000
Failed requests: 0
Write errors: 0
Total transferred: 5120000 bytes
HTML transferred: 220000 bytes
Requests per second: 12200.40 [#/sec] (mean)
Time per request: 1.639 [ms] (mean)
Time per request: 0.082 [ms] (mean, across all concurrent requests)
Transfer rate: 3050.10 [Kbytes/sec] received
5.ab測試tomcat請求靜態頁
[root@web01 ~]# rm -rf /code/try
Server Software: nginx/1.18.0
Server Hostname: linux.try.com
Server Port: 80
Document Path: /
Document Length: 7 bytes
Concurrency Level: 20
Time taken for tests: 11.736 seconds
Complete requests: 20000
Failed requests: 0
Write errors: 0
Total transferred: 5120000 bytes
HTML transferred: 140000 bytes
Requests per second: 1704.10 [#/sec] (mean)
Time per request: 11.736 [ms] (mean)
Time per request: 0.587 [ms] (mean, across all concurrent requests)
Transfer rate: 426.03 [Kbytes/sec] received