【20180712】Nginx 參數優化和內核參數優化

Nginx 參數優化

  1. worker_processes
    • 這裏的數值不能超過CPU的總核數,由於在單個核上部署超過1個Nginx服務進程並不能起到提升性能的做用。
  2. worker_rlimit_nofile
    • Nginx最大可用文件描述符數量,同時須要配置操做系統的"ulimit -n 200000",或者在/etc/security/limits.conf中配置
  3. worker_connections
    • 配置單個Nginx單個進程可服務的客戶端數量,(最大值客戶端數 = 單個進程連接數據 * 進程數),最大客戶端數同時也受操做系統socket連接數的影響(最大64K)
  4. use epoll
    • Linux 關鍵配置,容許單個線程處理多個客戶端請求
  5. multi_accept on
    • 運行儘量的處理更多的連接數,若是worker_connections配置過低,會產生大量的無效連接請求。
  6. 緩存配置信息javascript

    • open_file_cache max=200000 inactive=20s
      • 緩存高頻操做的文件的FDs(文件描述符/文件句柄) 最大數目和緩存的時間
    • open_file_cache_valid 30s
      • 在open_file_cache中指定檢測正確信息的間隔時間
    • open_file_cache_min_uses 2
      • 在open_file_cache中指令參數不活動期間內最小的文件數
    • open_file_cache_errors on
      • 指定令當搜索一個文件釋放緩存錯誤信息,也包括再次給配置文件添加文件
  7. sendfile on
    • 開啓sendfile選項,使得內核的FD文件傳輸功能,這個比用戶態用read()+write()的方式更高效
  8. tcp_nopush on
    • 打開tcp_nopush選項,Nginx容許將HTTP應答首部與數據內容在用一個報文中發出。這個選項使服務器在sendfile時能夠提早準備HTTP首部,可以達到優化吞吐的效果。
  9. tcp_nodelay on
    • 不要緩存data-sends(關閉Nagle算法),這個能提升高頻發送小數據報文的實時性。
  10. keepalive_timeout 30
    • 配置連接keep-alive超時時間,服務器將在超時以後關閉相應的連接。
  11. keepalive_requests 10000
    • 單個客戶端在keep-alive連接上能夠發送的請求數量。在測試和壓測的環境中,須要配置一個較大的值
  12. reset_timedout_connection on
    • 容許服務器在中止發送應答以後關閉鏈接,以便釋放連接相應的socket內存開銷。
  13. client_body_timeout 10
    • 配置客戶端數據請求超時時間,默認時60s
  14. send_timeout 2
    • 客戶端數據讀超時配置,客戶端中止讀取數據,超時時間後斷開相應的連接,默認時60s
  15. 壓縮參數設置,減小網絡上所傳輸的數據量,可是解壓也須要消耗必定的資源。
    • gzip on
    • gzip_min_length 10240
    • gzip_proxied expired no-cache no-store private auth
    • gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml
    • gzip_disable "MSIE [1-6]"
      • 指定客戶端禁止使用gzip壓縮功能

內核參數調優

  1. net.ipv4.ip_local_port_range = 2000 65000
    • 調高系統的IP以及端口數據限制,從能夠接受更多的連接
  2. net.ipv4.tcp_window_scaling = 1
    • 支持超過64KB的TCP窗口
  3. net.ipv4.tcp_max_syn_backlog = 3240000
    • 設置協議棧能夠緩存的報文數閥值,超過閥值的報文將被內核丟棄
  4. net.core.somaxconn = 3240000
    • 調高socket偵聽數閥值
  5. net.core.rmem_default = 8388608
    • 通常默認的接收窗口大小
  6. net.core.rmem_max = 16777216
    • 通常接收窗口的最大大小
  7. net.core.wmem_max = 16777216
    • 通常默認發送窗口最大大小
  8. net.ipv4.tcp_rmem = 4096 87380 16777216(min default max)
    • 爲TCP socket預留用於接收緩衝的內存數量,即便在內存出現緊張狀況下tcp socket都至少會有這麼多的數量的內存用於接收緩衝,默認值爲8K。
  9. net.ipv4.tcp_wmem = 4096 65536 16777216
    • 爲TCP socket預留用於發送緩衝的內存數量,每一個tcp socket均可以在建議之後均可以使用它。默認值爲6K
  10. net.ipv4.tcp_congestion_control = cubic
    • 修改TCP擁塞控制算法。丟包使得TCP傳輸速度大幅降低的主要緣由是丟包重傳機制,控制這一機制的就是TCP擁塞控制算法。
  11. net.ipv4.tcp_fin_timeout = 30
    • 表示若是套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
  12. net.ipv4.tcp_keepalive_time = 1200
    • 表示當前keepalive 啓用的時間,TCP發送keepalive消息的頻率。缺省是2小時,更改成20分鐘
  13. net.ipv4.tcp_syncookies =1
    • 表示開啓SYN Cookies。當出現SYN等待隊列溢出時,啓用cookies來處理,可防範少許的SYN ×××,默認爲0,表示關閉。
  14. net.ipv4.tcp_tw_reuse = 1
    • 表示開啓重用。容許將TIME-WAIT sockets從新用於新的TCP連接,默認爲0,表示關閉。
  15. net.ipv4.tcp_tw_recycle = 1
    • 表示開啓TCP連接中的TIME-WAIT sockets的快速回收,默認爲0,表示關閉。
  16. net.ipv4.tcp_max_tw_buckets = 5000
    • 表示系統同時保持TIME_WAIT套接字的最大數量,若是超過這個數字,TIME_WAIT套接字將馬上被清除並打印告警信息。默認爲180000,更改成5000.對於Apache,Nginx等服務器,上幾行參數能夠很好的減小TIME_WAIT套接字數量,可是對於Squid,效果不大。此項參數能夠控制TIME_WAIT套接字的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死。
相關文章
相關標籤/搜索