伺服器Nginx優化提高系統負載
前言
今天伺服器做壓測的時候,發現TCP連線數老被佔完,導致壓測資料上不去。
經過一番簡單折騰,優化了效果還不錯,2000+/秒的吞吐率。
不保證我的優化一定對你有用,具體優化引數還要根據自己的伺服器狀況,進行測試。
主要是對以下兩個方面進行了改進:
一、優化nginx配置
優化nginx.conf的兩個引數:
1.worker_processes,指明nginx要開啟的程序數。
根據官方說法,一般情況下開一個就夠了,多開幾個,可以減少機器io帶來的影響。但考慮到實際情況,可以修改這個數值,以提高效能。我這邊把worker_processes的值設定為了4.
2.worker_connections,每一個worker程序能併發處理的最大連線數(包含所有連線數)。
我在邊測試了下,worker_connections設定為4096的時候,效果不錯就用它了。具體設定值可根據自己伺服器調整測試。
二、調整/etc/sysctl.conf網路引數提高系統負載
先貼程式碼為敬,具體每個引數說明後面會貼上:
# 優化引數 net.ipv4.tcp_syncookies=1 net.ipv4.tcp_fin_timeout=5 net.ipv4.tcp_tw_recycle=1 net.ipv4.tcp_tw_reuse=1
然後執行/sbin/sysctl -p讓引數生效。
引數說明,還有一些我沒有使用的,可根據實際情況選用。
net.ipv4.tcp_syncookies = 1
表示開啟SYN Cookies。當出現SYN等待佇列溢位時,啟用cookies來處理,可防範少量SYN攻擊,預設為0,表示關閉;
net.ipv4.tcp_fin_timeout = 5
表示如果套接字由本端要求關閉,這個引數決定了它保持在FIN-WAIT-2狀態的時間。
net.ipv4.tcp_tw_recycle = 1
表示開啟TCP連線中TIME-WAIT sockets的快速回收,預設為0,表示關閉。
net.ipv4.tcp_tw_reuse = 1
表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連線,預設為0,表示關閉;
net.ipv4.tcp_keepalive_time = 1200
表示當keepalive起用的時候,TCP傳送keepalive訊息的頻度。預設是2小時,改為20分鐘。
net.ipv4.ip_local_port_range = 1024 65000
表示用於向外連線的埠範圍。預設情況下很小:32768到61000,改為1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192
表示SYN佇列的長度,預設為1024,加大佇列長度為8192,可以容納更多等待連線的網路連線數。