Nginx詳解二十六:Nginx架構篇之性能優化


 

一、性能優化考慮點

  1、當前系統結構瓶頸

    通過壓力測試觀察指標、日志檢測、性能分析

  2、了解業務模式

    接口業務類型、系統層次化結構

  3、性能與安全

 

二、ab接口壓力測試工具

1、安裝:yum -y install httpd-tools

2、使用:

ad -n 2000 -c 2 http://127.0.0.1
-n:總的請求數
-c:並發數
-k:是否開始長連接

准備環境

檢查語法,並重載
nginx -tc /etc/nginx/nginx.conf
nginx -s reload -c /etc/nginx/nginx.conf

 

 

執行壓測:ab -n 2000 -c 2 http://127.0.0.1/jesonc.html

 

CompletedCompleted表示進度,即當前完成多少個請求:

 

ab工具探測到的服務軟件:

 

文件路徑和body里面返回的文件大小:

 

性能指標:

Concurrency Level: 設定的並發數
Time taken for tests: 壓測總共花費的時間
Complete requests: 總請求數
Failed requests: 失敗的個數
Requests per second:每秒請求數(TPS)
Time per request: 從客戶端來看,一個請求需要用到的時間
Time per request: 從服務端來看,處理一個請求要花費的時間
Transfer rate: 傳輸的速率

 

看一下動態接口,在tomcat9090下准備一個接口,實現訪問時等待5秒

啟動tomcat

確認接口可以訪問:curl -I 127.0.0.1/sleepjava.jsp

 

兩個並發跑20次看一下:ab -n 20 -c 2 http://127.0.0.1/sleepjava.jsp

 

以下演示可以證明Nginx做動靜分離的好處:

再壓一下jesonc.html這個靜態資源,10個並發跑2000次:ab -n 2000 -c 2 http://127.0.0.1/jesonc.html 

TPS:8899.45

 

把/opt/app/code/cache/下的jesonc.html移走,觸發try_files訪問tomcat下的jesonc.html

 

還是10個並發跑2000次:ab -n 2000 -c 10 http://127.0.0.1/jesonc.html

TPS:128.72

 

可見,當把靜態資源放在Nginx上,性能比把靜態資源放tomcat上好得多

 

 

三、系統與Nginx性能優化

 

文件句柄:
linux/Unix上,一切皆文件,每一次用戶發起請求就會生成一個文件句柄,文件句柄可以理解為就是一個索引,所以文件句柄就會隨着請求量的增多,而進程調用的頻率增加,文件句柄的產生就越多,系統對文件句柄默認的限制是1024個,對Nginx來說非常小了,需要改大一點
設置方式:
系統全局性修改、用戶局部性修改、進程局部性修改

vim /etc/security/limits.conf

在End of file前面添加4個參數

root soft nofile 65535
root hard nofile 65535
*       soft nofile 25535
*       hard nofile 25535


soft:軟控制,到達設定值后,操作系統不會采取措施,只是發提醒
hard:硬控制,到達設定值后,操作系統會采取機制對當前進程進行限制,這個時候請求就會受到影響
root:這里代表root用戶(系統全局性修改)
*:代表全局,即所有用戶都受此限制(用戶局部性修改)
nofile:指限制的是文件數的配置項
后面的數字即設定的值,一般設置10000左右

尤其在企業新裝的系統,這個地方應該根據實際情況進行設置,可以設置全局的,也可以設置用戶級別的

 

修改進程級別的限制

vim /etc/nginx/nginx.conf

在配置文件中添加一行:worker_rlimit_nofile 35535;

 

 

CPU的親和

把Nginx不同work工作的進程綁定到不同的CPU上,就能減少在work間不斷的切換CPU,減少性能損耗

 

第一種配置:指定worker綁定指定CPU

由於我的虛擬機是單核,所以就這樣配就行了

檢查語法,並重載
nginx -tc /etc/nginx/nginx.conf
nginx -s reload -c /etc/nginx/nginx.conf

 

查看nginxworker占用cpu核數的情況:ps -eo pid,args,psr | grep [n]ginx

由於我這里是單核,所以只會有cpu0

 

也可以指定worker綁定到指定cpu上面

如以下配置,這樣會造成worker1和worker2都綁定到CPU1即第二個CPU上

 

 

第二種配置:指定worker能使用指定范圍的cpu

worker1可以使用cpu1、3、5、7、9、11、13、15
worker2可以使用cpu0、2、4、6、8、10、12、14

 

第三種配置:nginx自動綁定(Nginx1.9以后支持)

只要配置好worker數,並且配置為auto,Nginx就會自動進行配置1的方式的配置

 

 

Nginx通用配置優化

 

events:

worker_connections:Nginx限制每一個worker進程能處理多少個連接,默認1024個,可以適當調高

 

http:

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

#Charset
charset utf-8;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_uri"';
access_log /var/log/nginx/access.log main;

#Core modlue
sendfile on;
#tcp_nopush on;
#tcp_nodeny on;
keepalive_timeout 65;

#Gzip module
gzip on;
gzip_disable "MSIE [1-6]\.";
gzip_http_version 1.1;

#Virtal Server
include /etc/nginx/conf.d/*.conf;
}

charset utf-8:服務端返回給客戶端報文的時候,Nginx強行將報文轉碼為utf-8

gzip_disable "MSIE [1-6]\.":由於IE6對gzip壓縮支持的不是很好,所以這里配置agent是IE6以下的版本,則不進行gzip壓縮

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM