1. 程式人生 > 實用技巧 >nginx 效能優化

nginx 效能優化

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