nginx高併發優化

nginx 高併發優化

一、關閉系統中不需要的服務

二、優化磁盤寫操作

    mount -o remount defaults,noatime,nodiratime partion mount_partion

    fstab 將partion mount_partion defaults 0 0 

    修改爲partion mount_partion defaults,noatime,nodiratime 0 0

即修改爲寫入磁盤不修改訪問時間

三、優化資源限制

    ulimit -n 和ulimit -u 即open_file和最大打開程序數

    在文件中修改:

    vi /etc/security/limits.conf 

    * soft nofile 65535

    * hard nofile 65535

    * soft nproc 65535

    * hard nproc 65535

這種方式需要重啓系統或者直接使用ulimit -n&-u修改

四、nginx配置

nginx配置

關閉訪問日誌如果有需求根據區段來記錄

使用epoll模型

配置

worker_processes 8 //nginx進程數按照cpu數目來指定
worker_cpu_affinity //爲每個進程分配cpu
worker_rlimit_nofile 102400 //這個指令是指當一個nginx進程打開的最多文件描述符數目理論值應該是最多打開文件數(ulimit -n)與nginx進程數相除但是nginx分配請求並不是那個均勻所以最好與ulimit -n的值保持一致。
use epoll //使用epoll的I/O模型。
worker_connections 102400 //每個進程允許的最多連接數理論上每臺nginx服務器的最大連接數爲worker_processes*worker_connections。


keepalive_timeout 60;  //keepalive超時時間
client_header_buffer_size 4K //客戶端請求頭部的緩衝區大小這個可以根據你的系統分頁大小來設置一般一個請求頭的大小不會超過1k不過由於一般系統分頁都要大於1K所以這裏設置爲分頁大小。分頁大小可以用getconf PAGESIZE 獲取。
open_file_cache_max=102400 inactive 20s //這個將爲打開文件制定緩存默認是沒有啓動的max指定緩存數量建議和打開文件數一致inactive是指經過多長時間文件沒被請求後刪除。
open_file_cache_vaild 30s; //這個是指多長時間檢查一次緩存的有效信息。
open_file_cache_min_uses 1//open_file_cache指令中的inactive參數時間內文件的最少使用次數如果超過這個數字文件描述符一直是在緩存中打開的如上例如果有一個文件在inactive時間內一次沒被使用它將被移除。

gzip on;
五、內核優化
net.ipv4.tcp_max_tw_buckets=5000 //timewait的數量默認爲180000
net.ipv4.ip_local_port_range=1024 65000 //允許系統打開的端口範圍
net.ipv4.tcp_tw_recycle=1 //timewait快速回收
net.ipv4.tcp_tw_reuse=1 //開啓timewait重用允許把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_baklog=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的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種異常的數據包。這裏將其關閉。關閉時間戳會導致timewait快速回收無效根據自己情況進行設置。


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秒。你可以按這個設置但要記住的是即使你的機器是一個輕載的WEB服務器也有因爲大量的死套接字而內存溢出的風險FIN-WAIT-2的危險性比FIN-WAIT-1要小因爲它最多隻能吃掉1.5K內存但是他們的生存期長。

net.ipv4.tcp_keepalive_time=30 //當keepalive啓用的時候TCP發送keepalive消息的額度。缺省是2小時

六、TCMalloc優化內存使用

google-perftools優化

配置內容

google_perftools_profiles /tmp/tcmalloc;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章