centos7.4內核調優,tcp單服務器萬級併發

在使用linux的centos7.4遇到的各種坑,其中一個項目採用四層架構,配置層,平臺層,邏輯服務器管理層和集體邏輯服務器層的,一個整體的遊戲項目,其中,作為整個項目負責人和架構打架著,項目運行一年來,遇到了各種各樣怪異的問題。其中就是tcp緩存區堵塞的問題,剛開始時候,以為是代碼問題,花了半年的時間來排除,驗證,把能想到的問題都做了一個遍,問題還是存在。最後應該幾個調優和驗證。附上算比較穩定centos7.4的內核調優詳細參數如下:

內核配置文件:/etc/sysctl.conf

net.ipv4.tcp_mem = 768432 2097152 15242880

net.ipv4.tcp_wmem = 40960 163840 4194304

net.ipv4.tcp_rmem = 40960 873800 4194304

#net.core.somaxconn=6553600

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 524288000

net.core.wmem_max = 524288000

net.ipv4.tcp_syncookies=1

net.ipv4.tcp_max_syn_backlog=81920

net.ipv4.tcp_timestamps=0

# 參數的值決定了內核放棄鏈接之前發送SYN+ACK包的數量,該參數對應系統路徑為:/proc/sys/net/ipv4/tcp_synack_retries,默認是2

net.ipv4.tcp_synack_retries=3

# 表示內核放棄建立鏈接之前發送SYN包的數量,該參數對應系統路徑為:/proc/sys/net/ipv4/tcp_syn_retries,默認是6

net.ipv4.tcp_syn_retries=3

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 300

net.ipv4.ip_local_port_range = 20000 65000

net.ipv4.tcp_max_tw_buckets = 6000

net.ipv4.route.max_size = 5242880

kernel.sem=250 65536 100 2048

kernel.msgmnb = 4203520

kernel.msgmni = 64

kernel.msgmax = 65535

#設置最大內存共享段大小bytes

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

kernel.shmmni = 655360

net.ipv4.tcp_tw_reuse=1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_window_scaling = 1

net.ipv4.tcp_no_metrics_save=1

# 開啟SYN洪水攻擊保護

kernel.core_uses_pid = 1

net.ipv4.conf.lo.arp_announce=2

net.ipv4.tcp_sack = 1

kernel.randomize_va_space=1

net.nf_conntrack_max = 25000000

net.netfilter.nf_conntrack_max = 25000000

net.netfilter.nf_conntrack_tcp_timeout_established = 180

#net.ipv4.netfilter.ip_conntrack_max=1000000

net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120

net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60

net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

#避免放大攻擊

net.ipv4.icmp_echo_ignore_broadcasts=1

#關閉ipv6

net.ipv6.conf.all.disable_ipv6 = 1

net.ipv6.conf.default.disable_ipv6 = 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

#每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目

net.core.netdev_max_backlog = 262144

#限制僅僅是為了防止簡單的DoS 攻擊

net.ipv4.tcp_max_orphans = 3276800

# 確保無人能修改路由表

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

vm.swappiness = 0

#決定檢查過期多久鄰居條目

net.ipv4.neigh.default.gc_stale_time=120

fs.file-max = 40000500

fs.nr_open = 40000500

kernel.perf_cpu_time_max_percent=60

kernel.perf_event_max_sample_rate=6250

kernel.sched_migration_cost_ns=5000000

net.core.optmem_max= 25165824

vm.max_map_count=262144

net.core.somaxconn = 65535

#使用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


分享到:


相關文章: