【引自asd1123509133的博客】1. 背景
介紹:
Nginx是一款高性能的HTTP和反向代理服務器,能夠選擇高效的epoll(linux2.6內(nèi)核)、kqueue(freebsd)、eventport(solaris10)作為網(wǎng)絡I/O模型,能夠支持高達50000個并發(fā)連接數(shù)的響應,而內(nèi)存、CPU等系統(tǒng)資源消耗卻非常低、運行非常穩(wěn)定。
選擇的理由:
* 支持高并發(fā)連接:nginx使用高效的多路復用模型(epoll/linux, kqueue/freebsd, eventport/solaris)
* 內(nèi)存消耗少:在服務器3W并發(fā)連接下,開啟10個Nginx進程消耗150MB內(nèi)存(15MB*10)
* 成本低廉:購買F5 BIG-IP、NetScaler等負載均衡交換機需要幾十萬RMB,而開源Nginx替代這些商業(yè)設備。
* 其他理由:網(wǎng)絡配置簡單;支持rewrite重寫規(guī)則,能夠根據(jù)域名、URL的不同、將HTTP請求分到不同的后端服務器群組;內(nèi)置的健康檢查功能;節(jié)省帶寬,支持GZIP壓縮,可以添加瀏覽器本地緩存的Header頭;支持熱部署,能夠在不間斷服務的情況下、對軟件版本進行升級
2. 環(huán)境
[root@nginx~]$uname-r
2.6.32-642.13.1.el6.x86_64
[root@nginx~]$uname-m
x86_64
[root@nginx~]$cat/etc/redhat-release
CentOSrelease6.8(Final)
3. 優(yōu)化
* nginx配置文件優(yōu)化
- nginx進程數(shù),建議按照cpu數(shù)目來指定,一般為它的倍數(shù):
- worker_processes 4;
- 為每個進程綁定cpu:
- worker_cpu_affinity 00000001 00000010 00000100 00001000;
- nginx進程打開的最多文件描述符數(shù)目:
- worker_rlimit_nofile 102400;
- 使用epoll的I/O復用模型:
- use epoll;
- 每個進程允許的最多連接數(shù):
- worker_connections 102400;
- keepalive超時時間:
- keepalive_timeout 60;
- 客戶端請求頭部的緩沖區(qū)大小: (分頁大小可以用命令getconf PAGESIZE取得):
- client_header_buffer_size 4k;
- 打開文件指定緩存,默認是沒有啟用的,max指定緩存數(shù)量,建議和打開文件數(shù)一致,inactive是指經(jīng)過多長時間文件沒被請求后刪除緩存:
- open_file_cache max=102400 inactive=20s;
- 指定多長時間檢查一次緩存的有效信息:
- open_file_cache_valid 30s;
- 設置最少使用次數(shù),如果超過這個數(shù)字,文件描述符一直是在緩存中打開的:
- open_file_cache_min_uses 1;
* 系統(tǒng)優(yōu)化
- timewait的數(shù)量,默認是180000。(Deven:因此如果想把timewait降下了就要把tcp_max_tw_buckets值減小):
- net.ipv4.tcp_max_tw_buckets = 6000
- 允許系統(tǒng)打開的端口范圍:
- net.ipv4.ip_local_port_range = 1024 65000
- 啟用timewait快速回收:
- net.ipv4.tcp_tw_recycle = 1
- 開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接:
- net.ipv4.tcp_tw_reuse = 1
- 開啟SYN Cookies,當出現(xiàn)SYN等待隊列溢出時,啟用cookies來處理:
- net.ipv4.tcp_syncookies = 1
- web應用中l(wèi)isten函數(shù)的backlog默認會給我們內(nèi)核參數(shù)的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG默認為511:
- net.core.somaxconn = 262144
- 允許送到隊列的數(shù)據(jù)包的最大數(shù)目:
- net.core.netdev_max_backlog = 262144
- 系統(tǒng)中最多有多少個TCP套接字不被關(guān)聯(lián)到任何一個用戶文件句柄上:
- net.ipv4.tcp_max_orphans = 262144
- 記錄的那些尚未收到客戶端確認信息的連接請求的最大值:
- net.ipv4.tcp_max_syn_backlog = 262144
原標題: Nginx高級應用--------性能優(yōu)化,突破C100K 上海網(wǎng)站建設(http://www.xykonline.com)2022-07-04
2022-06-21
2022-06-13
2022-06-13
2022-06-07
2021-11-18
2021-07-07
2020-11-11
2020-09-18
2020-09-18
2020-09-08
2020-09-04