【20180712】Nginx 參數優化和內核參數優化
Nginx 參數優化
- worker_processes
- 這裏的數值不能超過CPU的總核數,由於在單個核上部署超過1個Nginx服務進程並不能起到提升性能的做用。
- worker_rlimit_nofile
- Nginx最大可用文件描述符數量,同時須要配置操做系統的"ulimit -n 200000",或者在/etc/security/limits.conf中配置
- worker_connections
- 配置單個Nginx單個進程可服務的客戶端數量,(最大值客戶端數 = 單個進程連接數據 * 進程數),最大客戶端數同時也受操做系統socket連接數的影響(最大64K)
- use epoll
- Linux 關鍵配置,容許單個線程處理多個客戶端請求
- multi_accept on
- 運行儘量的處理更多的連接數,若是worker_connections配置過低,會產生大量的無效連接請求。
-
緩存配置信息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
- 指定令當搜索一個文件釋放緩存錯誤信息,也包括再次給配置文件添加文件
- sendfile on
- 開啓sendfile選項,使得內核的FD文件傳輸功能,這個比用戶態用read()+write()的方式更高效
- tcp_nopush on
- 打開tcp_nopush選項,Nginx容許將HTTP應答首部與數據內容在用一個報文中發出。這個選項使服務器在sendfile時能夠提早準備HTTP首部,可以達到優化吞吐的效果。
- tcp_nodelay on
- 不要緩存data-sends(關閉Nagle算法),這個能提升高頻發送小數據報文的實時性。
- keepalive_timeout 30
- 配置連接keep-alive超時時間,服務器將在超時以後關閉相應的連接。
- keepalive_requests 10000
- 單個客戶端在keep-alive連接上能夠發送的請求數量。在測試和壓測的環境中,須要配置一個較大的值
- reset_timedout_connection on
- 容許服務器在中止發送應答以後關閉鏈接,以便釋放連接相應的socket內存開銷。
- client_body_timeout 10
- send_timeout 2
- 客戶端數據讀超時配置,客戶端中止讀取數據,超時時間後斷開相應的連接,默認時60s
- 壓縮參數設置,減小網絡上所傳輸的數據量,可是解壓也須要消耗必定的資源。
- 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]"
內核參數調優
- net.ipv4.ip_local_port_range = 2000 65000
- 調高系統的IP以及端口數據限制,從能夠接受更多的連接
- net.ipv4.tcp_window_scaling = 1
- net.ipv4.tcp_max_syn_backlog = 3240000
- 設置協議棧能夠緩存的報文數閥值,超過閥值的報文將被內核丟棄
- net.core.somaxconn = 3240000
- net.core.rmem_default = 8388608
- net.core.rmem_max = 16777216
- net.core.wmem_max = 16777216
- net.ipv4.tcp_rmem = 4096 87380 16777216(min default max)
- 爲TCP socket預留用於接收緩衝的內存數量,即便在內存出現緊張狀況下tcp socket都至少會有這麼多的數量的內存用於接收緩衝,默認值爲8K。
- net.ipv4.tcp_wmem = 4096 65536 16777216
- 爲TCP socket預留用於發送緩衝的內存數量,每一個tcp socket均可以在建議之後均可以使用它。默認值爲6K
- net.ipv4.tcp_congestion_control = cubic
- 修改TCP擁塞控制算法。丟包使得TCP傳輸速度大幅降低的主要緣由是丟包重傳機制,控制這一機制的就是TCP擁塞控制算法。
- net.ipv4.tcp_fin_timeout = 30
- 表示若是套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
- net.ipv4.tcp_keepalive_time = 1200
- 表示當前keepalive 啓用的時間,TCP發送keepalive消息的頻率。缺省是2小時,更改成20分鐘
- net.ipv4.tcp_syncookies =1
- 表示開啓SYN Cookies。當出現SYN等待隊列溢出時,啓用cookies來處理,可防範少許的SYN ×××,默認爲0,表示關閉。
- net.ipv4.tcp_tw_reuse = 1
- 表示開啓重用。容許將TIME-WAIT sockets從新用於新的TCP連接,默認爲0,表示關閉。
- net.ipv4.tcp_tw_recycle = 1
- 表示開啓TCP連接中的TIME-WAIT sockets的快速回收,默認爲0,表示關閉。
- net.ipv4.tcp_max_tw_buckets = 5000
- 表示系統同時保持TIME_WAIT套接字的最大數量,若是超過這個數字,TIME_WAIT套接字將馬上被清除並打印告警信息。默認爲180000,更改成5000.對於Apache,Nginx等服務器,上幾行參數能夠很好的減小TIME_WAIT套接字數量,可是對於Squid,效果不大。此項參數能夠控制TIME_WAIT套接字的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死。
歡迎關注本站公眾號,獲取更多信息