首頁 運維 linux運維 詳解nginx高並發配置參數

詳解nginx高並發配置參數

Aug 23, 2017 pm 03:25 PM
nginx 參數 配置

一、一般來說nginx 設定檔中對最佳化比較有作用的為下列幾項:

#1.  worker_processes 8;

nginx 進程數,建議依照cpu 數目來指定,一般為它的倍數(如,2個四核心的cpu計為8)。

2.  worker_cpu_affinity 00000001 0000001000000100 00001000 00010000 00100000 01000000 10#c ,或者將一

個行程分配到多個cpu。


3.  worker_rlimit_nofile65535;

這個指令是指當一個nginx 進程打開的最多檔案描述符數目,理論值應該是最多打開文

件數(ulimit -n)與nginx進程數相除,但是nginx 分配請求並不是那麼均勻,所以最好與ulimit -n的值保持一致。


現在在linux2.6核心下開啟檔案開啟數為65535,worker_rlimit_nofile就對應到應該填入65535。

這是因為nginx調度時分配請求到進程並不是那麼的均衡,所以假如填寫10240,總並發量達到3-4萬時就有進程可能超過10240了,這時會返回502錯誤。

查看linux系統檔案描述子的方法:

[root@web001 ~]# sysctl -a | grep fs.file

fs.file-max = 789972

fs.file-nr = 510 0 789972

4.  useepoll;

使用epoll 的I/O 模型

(

#補充說明:

與apache相類,nginx針對不同的作業系統,有不同的事件模型

     A)標準事件模型

     Select、poll屬於標準事件模型,若目前系統不存在更有效的方法,nginx會選擇select或poll

     B)高效能事件模型  
Kqueue:使用於FreeBSD 4.1+, OpenBSD 2.9+, NetBSD2.0 和MacOS X. 使用雙處理器的MacOS X系統使用kqueue可能會造成核心崩潰。
Epoll: 使用於Linux核心2.6版本及以後的系統。



/dev/poll:使用於 Solaris 7 11/99+, HP/UX 11.22+(eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。


       Eventport:使用於 Solaris 10. 為了防止核心崩潰的問題,有必要安裝安全性修補程式。

)

5.  worker_connections65535;

每個行程允許的最多連線數, 理論上每台nginx伺服器的最大連線數為worker_processes*worker_connections。

6.  keepalive_timeout60;

keepalive 逾時時間。

7.  client_header_buffer_size4k;

客戶端要求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求頭的大小不會超過1k,但由於一般系統分頁都要大於1k,所以這裡設定為分頁大小。 

分頁大小可用指令getconf PAGESIZE 取得。

[root@web001 ~]# getconf PAGESIZE 

4096

但也有client_header_buffer_size超過4k的情況,但是client_header_buffer_size該值必須設定為「系統分頁大小」的整頁大小」的整頁倍數。

8.  open_file_cachemax=65535 inactive=60s;

這個將為開啟檔案指定緩存,預設是沒有啟用的,max 指定快取數量,建議和開啟檔案數一致,inactive是指經過多久文件沒被要求後刪除快取。

9.  open_file_cache_valid80s;

這個是指多久檢查一次快取的有效資訊。

10.  open_file_cache_min_uses1;

open_file_cache 指令中的inactive參數時間內檔案的最少使用次數,如果超過這個數字,檔案描述子一直是在快取中開啟的,如上例,如果有一個文件在inactive時間內一次沒被使用,它將被移除。

二、關於核心參數的最佳化:

net.ipv4.tcp_max_tw_buckets = 6000

timewait 的數量,預設是180000。

net.ipv4.ip_local_port_range = 1024 65000

允許系統開啟的連接埠範圍。

net.ipv4.tcp_tw_recycle = 1

啟用timewait 快速回收。

net.ipv4.tcp_tw_reuse = 1

開啟重複使用。允許將TIME-WAIT sockets 重新用於新的TCP 連線。

net.ipv4.tcp_syncookies = 1

開啟SYN Cookies,當出現SYN 等待佇列溢出時,啟用cookies 來處理。

net.core.somaxconn = 262144

web 應用程式中listen 函數的backlog 預設會給我們核心參數的net.core.somaxconn限製到128,而nginx 定義的NGX_LISTEN_BACKLOG 預設為511 ,所以有必要調整這個值。

net.core.netdev_max_backlog = 262144

每個網路介面接收封包的速率比核心處理這些封包的速率快時,允許送到佇列的封包的最大數目。

net.ipv4.tcp_max_orphans = 262144

系統中最多有多少個TCP套接字不會被關聯到任何一個使用者檔案句柄上。如果超過這個數字,孤兒連結將立即被重設並印出警告訊息。這個限制只是為了防止簡單的DoS攻擊,不能過分依靠它或人為地減小這個值,更應該增加這個值(如果增加了記憶體之後)。

net.ipv4.tcp_max_syn_backlog = 262144

記錄的那些尚未收到客戶端確認訊息的連線請求的最大值。對於有128M記憶體的系統而言,預設值是1024,小記憶體的系統則是128。

net.ipv4.tcp_timestamps = 0

時間戳可以避免序號的捲繞。一個1Gbps的連結一定會遇到以前用過的序號。時間戳能夠讓核心接受這種「異常」的資料包。這裡需要將其關掉。

net.ipv4.tcp_synack_retries = 1

為了開啟對端的連接,核心需要發送一個SYN 並附帶一個回應前面一個SYN的ACK。也就是所謂三次握手中的第二次握手。這個設定決定了在核心放棄連線之前發送SYN+ACK 套件的數量。

net.ipv4.tcp_syn_retries = 1

在核心放棄建立連線之前發送SYN 套件的數量。

net.ipv4.tcp_fin_timeout = 1

如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。對端可以出錯並永遠不關閉連接,甚至意外當機。缺省值是60 秒。 2.2 核心的通常值是180秒,3你可以按這個設置,但要記住的是,即使你的機器是一個輕載的WEB 伺服器,也有因為大量的死套接字而內存溢出的風險,FIN -WAIT-2 的危險性比FIN-WAIT-1 要小,因為它最多只能吃掉1.5K 內存,但是它們的生存期長些。

net.ipv4.tcp_keepalive_time = 30

當keepalive 起用的時候,TCP 發送keepalive 訊息的頻度。缺省是2 小時。

三、下面貼上一個完整的核心最佳化設定:

vi /etc/sysctl.conf CentOS5.5中可以將所有內容清空直接替換為如下內容:

#net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmallk. .tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304.tcp_rmem = 4096 87380 4194304.tcp_rmem = 4096 87380 4194304. 04
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 167777216
net.core.wmem_max = 16777216#214log. #net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 00.>>>>>>>>>>>>>>>>>>>A>A_ 寶貝#net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 91##net.ipv4.tcp_mem = 94500000 915000000
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000

使設定立即生效可使用下列命令:
/sbin/sysctl -p

#四、下面是關於系統連接數的最佳化

linux 預設值open files 和max user processes 為1024

#ulimit -n

1024

#ulimit –u

1024

問題描述: 說明server 只允許同時開啟1024 個文件,處理1024個使用者進程

使用ulimit -a 可以檢視目前系統的所有限制值,使用ulimit -n 可以查看目前的最大開啟檔案數。

新組裝的linux 預設只有1024 ,當作負載較大的伺服器時,很容易遇到error: too many open files。因此,需要將其改大。

 

解決方法:

使用 ulimit –n 65535 可即時修改,但重新啟動後就無效了。 (註ulimit -SHn 65535 等效ulimit-n 65535 ,-S 指soft ,-H 指hard)

有下列三種修改方式:

1. 在/etc/rc. local 中增加一行ulimit -SHn 65535

2. 在/etc/profile 中增加一行ulimit -SHn 65535

3. 在/etc/security/limits.conf最後增加:

* soft nofile 65535

* hard nofile 65535

* soft nproc 65535

* hard nproc 65535

#具體使用哪一種,在CentOS 中使用第1 種方式無效果,使用第3 種方式有效果,而在Debian 中使用第2種有效果

 # ulimit -n

65535

# ulimit -u

#65535

 

備註:ulimit 指令本身就有分軟硬設置,加-H 就是硬,加-S 就是軟預設顯示的是軟限制

soft 限制指的是當前系統生效的設定值。 hard 限制值可以被一般使用者降低。但是不能增加。 soft 限制不能設定的比hard 限制更高。 只有 root 使用者才能夠增加 hard 限制值。

五、下面是一個簡單的nginx 設定檔:

user www www;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 0001000000100000 pid /usr/local/ nginx/nginx.pid;
worker_rlimit_nofile 204800;
events
{
use epoll;
worker_connections 204800;
}
http
{
include mime.類型;
default_type application/octet-stream;
charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 2k;
large_#ent_header_bclis 4 4 45_5; ;
tcp_nopush on;
keepalive_timeout 60;
fastcgi_cache_path /usr/local/nginx/fastcgi_cache 等級=1:2
keys_zone=TEST:10m
inactive=5m;#fastc ;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;
fastcgi_busy_busy_bGIs_size 8 4k;
fastcgi_busy_busy_bGIs_size 18300000 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid任意1m;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale 錯誤逾時invalid_headerhttp_500;
open_file_cache max=204800 inactive=20s;
open_file_cache_min_Lache_cache_x 001; ;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain appliip_comp_level 2;
gzip_types text/plain appli/xg -apptext/ics; ;
server
{
listen 8080;
server_name backup.aiju.com;
index index.php index.htm;
root /www/html/;
位置/status
{
stub_status on;
}
位置~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf |js|css)$
#{
expires 30d;
}
log_format access '$remote_addr -- $remote_user [$time_local]"$request" '
'$status $body_bytes_sent " $http_referer" '
'"$http_user_agent" $ http_x_forwarded_for';
access_log /www/log/access.log access;
}
}

六、關於FastCGI的幾個指令:

fastcgi_cache_path /usr/ local/nginx/fastcgi_cachelevels=1:2keys_zone=TEST:10minactive=5m;

這個指令為FastCGI 儲存指定一個路徑,目錄結構等級,key字區域儲存時間和非活動刪除時間。 ##fastcgi_connect_timeout 300;

指定連接到耳機FastCGI的逾時時間。次握手後傳送請求給FastCGI 的逾時時間。

fastcgi_buffer_size 4k;

指定讀取FastCGI回應第一部分需要用這麼大的大象,一般第一部分回應不會超過1k,由於頁面大小為4k,所以這裡設定為4k 。知道有什麼用,只知道預設值是fastcgi_buffers的倍數。

#fastcgi_cache TEST

開啟FastCGI快取並明確制定名稱。

fastcgi_cache_valid 301 1d;

fastcgi_cache_valid any 1m;

為指定的中繼程式碼指定快取時間,如上例將200,302個初始化快取一小時,301個初始化快取1天,其他為1分鐘。 ,那麼這個檔案將會被移除。 nginx中FastCGI相關參數,另外,FastCGI本身也有一些設定需要進行最佳化,如果你使用php-fpm來管理FastCGI,可以修改設定檔中的下列值:

60

同時處理的並發請求數,即會開啟最多60個子執行緒來處理並發連線。

最多開啟檔案數。

以上是詳解nginx高並發配置參數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

docker容器名稱怎麼查 docker容器名稱怎麼查 Apr 15, 2025 pm 12:21 PM

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

nginx在windows中怎麼配置 nginx在windows中怎麼配置 Apr 14, 2025 pm 12:57 PM

如何在 Windows 中配置 Nginx?安裝 Nginx 並創建虛擬主機配置。修改主配置文件並包含虛擬主機配置。啟動或重新加載 Nginx。測試配置並查看網站。選擇性啟用 SSL 並配置 SSL 證書。選擇性設置防火牆允許 80 和 443 端口流量。

怎麼查看nginx是否啟動 怎麼查看nginx是否啟動 Apr 14, 2025 pm 01:03 PM

確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

nginx怎麼配置雲服務器域名 nginx怎麼配置雲服務器域名 Apr 14, 2025 pm 12:18 PM

在雲服務器上配置 Nginx 域名的方法:創建 A 記錄,指向雲服務器的公共 IP 地址。在 Nginx 配置文件中添加虛擬主機塊,指定偵聽端口、域名和網站根目錄。重啟 Nginx 以應用更改。訪問域名測試配置。其他注意事項:安裝 SSL 證書啟用 HTTPS、確保防火牆允許 80 端口流量、等待 DNS 解析生效。

docker怎麼啟動容器 docker怎麼啟動容器 Apr 15, 2025 pm 12:27 PM

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

docker怎麼創建容器 docker怎麼創建容器 Apr 15, 2025 pm 12:18 PM

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

nginx怎麼查版本 nginx怎麼查版本 Apr 14, 2025 am 11:57 AM

可以查詢 Nginx 版本的方法有:使用 nginx -v 命令;查看 nginx.conf 文件中的 version 指令;打開 Nginx 錯誤頁,查看頁面的標題。

怎麼啟動nginx服務器 怎麼啟動nginx服務器 Apr 14, 2025 pm 12:27 PM

啟動 Nginx 服務器需要按照不同操作系統採取不同的步驟:Linux/Unix 系統:安裝 Nginx 軟件包(例如使用 apt-get 或 yum)。使用 systemctl 啟動 Nginx 服務(例如 sudo systemctl start nginx)。 Windows 系統:下載並安裝 Windows 二進製文件。使用 nginx.exe 可執行文件啟動 Nginx(例如 nginx.exe -c conf\nginx.conf)。無論使用哪種操作系統,您都可以通過訪問服務器 IP

See all articles