sysctl.conf文件詳解


由於默認的Linux內核參數考慮的是最通用的場景,這明顯不符合用於支持高並發訪問的Web服務器的定義,所以需要修改Linux參數,使得Nginx等Web服務可以擁有更高的性能:
首先,需要修改/etc/sysctl.conf來更改內核參數。如下最常用的配置
 
/proc/sys目錄下存放着大多數內核參數,並且可以在系統運行時進行更改,不過重新啟動機器就會失效。/etc/sysctl.conf是一個允許改變正在運行中的Linux系統的接口,它包含一些TCP/IP堆棧和虛擬內存系統的高級選項,修改內核參數永久生效。也就是說/proc/sys下內核文件與配置文件sysctl.conf中變量存在着對應關系。
 
我目前生產機器的配置:
 
vm.swappiness = 0
vm.max_map_count=655360
fs.file-max = 999999 
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_keepalive_time = 60 
net.ipv4.tcp_fin_timeout = 30 
net.ipv4.tcp_max_tw_buckets = 5000 
net.ipv4.ip_local_port_range = 1024 61000 
net.ipv4.tcp_rmem = 4096 32768 262142 
net.ipv4.tcp_wmem = 4096 32768 262142 
net.core.netdev_max_backlog = 8096 
net.core.rmem_default = 262144 
net.core.wmem_default = 262144 
net.core.rmem_max = 2097152 
net.core.wmem_max = 2097152 
net.ipv4.tcp_syncookies = 1 
net.ipv4.tcp_max_syn.backlog = 1024
swapoff -a && swapon -a 然后執行 sysctl -p 命令,使上述修改生效。

 

上面的參數意義解釋如下:

  • vm.swappiness : 關閉swap分區,kubernetes環境必備
  • vm.max_map_count : ElasticSearch環境必備,否則啟動報錯。
  • file-max : 這個參數表示進程(比如一個work進程)可以同時打開的最大句柄數,這個參數直接限制最大並發連接數,需根據實際情況配置。
  • tcp_tw_reuse : 這個參數設置為1,表示允許將TIME-WAIT狀態的socket重新用於新的TCP連接,這對於服務器來說很有意義,因為服務器上總會有大量TIME-WAIT狀態。
  • tcp_keepalive_time : 這個參數表示當keepalive啟用時,TCP發送keepalive消息的頻率。默認是2小時,若將其設置的小一些,可以更快第清理無效的連接。
  • tcp_fin_timeout : 這個參數表示當服務器主動關閉連接時,socket保持在FIN-WAIT-2狀態的最大時間。
  • tcp_max_tw_buckets : 這個參數表示操作系統允許TIME_WAIT套接字數量的最大值,如果超過這個數字,TIME_WAIT套接字將立刻被清除病打印警告信息。該參數默認為180000,過多的TIME_WAIT套接字會使Web服務器變慢。
  • tcp_max_syn_backlog : 這個參數表示TCP三次握手建立階段接收SYN請求隊列的最大長度,默認為1024,將其設置得大一些可以使出現Nginx繁忙來不及accept新連接的情況時,Linux不至於丟失客戶端發起的連接請求。
  • ip_local_port_range : 這個參數定義了在UDP和TCP連接中本地(不包括連接的遠端)端口的取值范圍。
  • net.ipv4.tcp_rmem : 這個參數定義了TCP接收緩存(用於TCP接收滑動窗口)的最小值、默認值、最大值。
  • net.ipv4.tcp_wmem : 這個參數定義了TCP發送緩存(用於TCP發送滑動窗口)的最小值、默認值、最大值。
  • netdev_max_backlog : 當網卡接收數據包的速度大於內核處理的速度時,會有一個隊列保存這些數據包。這個參數表示該隊列的最大值。
  • rmem_default : 這個參數表示內核套接字接收緩存區默認的大小。
  • wmem_default : 這個參數表示內核套接字發送緩存區默認的大小。
  • rmem_max : 這個參數表示內核套接字接收緩存區的最大大小。
  • wmem_max : 這個參數表示內核套接字發送緩存區的最大大小。
  • tcp_syncookies : 該參數與性能無關,用於解決TCP的SYN攻擊。

其他配置參考(注意,切忌過度優化,有些參數需要具體了解,否則會出現莫名其妙的問題,如 https://www.cnblogs.com/lulu/p/4149312.html):

#CTCDN系統優化參數

#關閉ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
#決定檢查過期多久鄰居條目
net.ipv4.neigh.default.gc_stale_time=120
#使用arp_announce / arp_ignore解決ARP映射問題
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
# 避免放大攻擊
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 開啟惡意icmp錯誤消息保護
net.ipv4.icmp_ignore_bogus_error_responses = 1
#關閉路由轉發
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
#開啟反向路徑過濾
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
#處理無源路由的包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
#關閉sysrq功能
kernel.sysrq = 0
#core文件名中添加pid作為擴展名
kernel.core_uses_pid = 1
# 開啟SYN洪水攻擊保護
net.ipv4.tcp_syncookies = 1
#修改消息隊列長度
kernel.msgmnb = 65536
kernel.msgmax = 65536
#設置最大內存共享段大小bytes
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
#timewait的數量,默認180000
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096        87380   4194304
net.ipv4.tcp_wmem = 4096        16384   4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
#每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目
net.core.netdev_max_backlog = 262144
#限制僅僅是為了防止簡單的DoS 攻擊
net.ipv4.tcp_max_orphans = 3276800
#未收到客戶端確認信息的連接請求的最大值
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
#內核放棄建立連接之前發送SYNACK 包的數量
net.ipv4.tcp_synack_retries = 1
#內核放棄建立連接之前發送SYN 包的數量
net.ipv4.tcp_syn_retries = 1
#啟用timewait 快速回收
net.ipv4.tcp_tw_recycle = 1
#開啟重用。允許將TIME-WAIT sockets 重新用於新的TCP 連接
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
#當keepalive 起用的時候,TCP 發送keepalive 消息的頻度。缺省是2 小時
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
#允許系統打開的端口范圍
net.ipv4.ip_local_port_range = 1024    65000
#修改防火牆表大小,默認65536
net.netfilter.nf_conntrack_max=655350
net.netfilter.nf_conntrack_tcp_timeout_established=1200
# 確保無人能修改路由表
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM