調整數據包的生存周期 TTL
增大每個套接字的緩沖區大小
## 套接字
* 調整讀/寫緩沖區大小
* 增大每個套接字的緩沖區大小`net.core.optmem_max`。
* 增大套接字接收緩沖區大小`net.core.rmem_max`和發送緩沖區大小`net.core.wmem_max`。
* 增大 TCP 接收緩沖區大小`net.ipv4.tcp_rmem`和發送緩沖區大小`net.ipv4.tcp_wmem`。
* 增大 UDP 接收緩沖區大小`net.ipv4.udp_rmem`和發送緩沖區大小`net.ipv4.udp_wmem`。TCP 行為
* 開啟 TCP\_NODELAY,禁用 Nagle 算法。
* 開啟 TCP\_CORK,讓小包聚合成大包后再發送。
## 網絡層
* 路由和轉發
* 調整數據包的生存周期 TTL,比如設置`net.ipv4.ip_default_ttl`為 64。**增大該值會降低系統性能**。
* 開啟數據包的反向地址校驗,比如將`net.ipv4.conf.eth0.rp_filter`置 1。這樣可以防止 IP 欺騙,并減少偽造 IP 帶來的 DDoS 問題。
* 分片
* VXLAN、GRE 等網絡疊加技術會使原來的網絡包變大,而以太網標準規定一個網絡幀最大 1518 字節,增大交換機、路由器等的 MTU 或減小 VXLAN 封包前的 MTU。
* 支持“巨幀”的網絡設備調大 MTU。
* ICMP
* 禁止 ICMP 協議,即將`net.ipv4.icmp_echo_ignore_all`置 1 防止 ICMP 嗅探主機。
* 禁止廣播 ICMP,即將`net.ipv4.icmp_echo_ignore_broadcasts`置 1。
## 傳輸層
### TCP
* 流量比較大的場景下有大量處于 TIME\_WAIT 狀態的連接
* 增大處于 TIME\_WAIT 狀態的連接數量`net.ipv4.tcp_max_tw_buckets`,并增大連接跟蹤表的大小 net.netfilter.nf\_conntrack\_max。
* 減小`net.ipv4.tcp_fin_timeout`和`net.netfilter.nf_conntrack_tcp_timeout_time_wait`,讓系統盡快釋放它們所占用的資源。
* 開啟端口復用`net.ipv4.tcp_tw_reuse`。這樣,被 TIME\_WAIT 狀態占用的端口,還能用到新建的連接中。
* 增大本地端口的范圍`net.ipv4.ip_local_port_range`。這樣就可以支持更多連接,提高整體的并發能力。
* 增加最大文件描述符的數量,`fs.nr_open`調大進程的最大文件描述符數,`fs.file-max`調大系統的最大文件描述符數。
* 緩解 SYN 洪水
* 增大 TCP 半連接的最大數量`net.ipv4.tcp_max_syn_backlog`。
* 開啟 TCP SYN Cookies`net.ipv4.tcp_syncookies`(不能與上面同時使用)。
* 減少 SYN\_RECV 狀態的連接重傳 SYN+ACK 包的次數`net.ipv4.tcp_synack_retries`。
* 優化與 Keepalive 相關的內核選項,對端連接斷開后,可以自動回收
* 縮短最后一次數據包到 Keepalive 探測包的間隔時間`net.ipv4.tcp_keepalive_time`。
* 縮短發送 Keepalive 探測包的間隔時間`net.ipv4.tcp_keepalive_intvl`。
* 減少 Keepalive 探測失敗后,一直到通知應用程序前的重試次數`net.ipv4.tcp_keepalive_probes`。
## 應用層
* 網絡 I/O 技術
* epoll(Nodejs、Golang、Netty)
* AIO(Python asyncio)
* 進程工作模型
* master + N x worker,主進程負責管理網絡連接,而子進程負責實際的業務處理。
* SO\_REUSEPORT 將多個進程或者線程綁定到同一端口
* 網絡協議優化
* 使用長連接降低 TCP 連接建立成本(WebSocket)。
* 使用 gRPC 相比 HTTP 可以大幅減小單次網絡 I/O 數據量。
* DNS 緩存、預取、HTTPDNS 等方式,減少 DNS 解析的延遲。
- 文章翻譯
- Large-scale cluster management at Google with Borg
- Borg Omega and kubernetes
- scaling kubernetes to 7500 nodes
- bpf 的過去,未來與現在
- Demystifying Istio Circuit Breaking
- 知識圖譜
- skill level up graph
- 一、運維常用技能
- 1.0 Vim (編輯器)
- 1.1 Nginx & Tengine(Web服務)
- 基礎
- 1.2 zabbix
- 定義
- 登錄和配置用戶
- 1.3 RabbitMQ(消息隊列)
- 原理
- RabbitMQ(安裝)
- 1.4虛擬化技術
- KVM
- 1.5 Tomcat(Web中間件)
- 1.6Jenkins
- pipline
- 1.7 Docker
- network
- 1.8 Keepalived(負載均衡高可用)
- 1.9 Memcache(分布式緩存)
- 1.10 Zookeeper(分布式協調系統)
- 1.11 GitLab(版本控制)
- 1.12 Jenkins(運維自動化)
- 1.13 WAF(Web防火墻)
- 1.14 HAproxy負載均衡
- 1.15 NFS(文件傳輸)
- 1.16 Vim(編輯器)
- 1.17 Cobbler(自動化部署)
- 二、常用數據庫
- 2.1 MySQL(關系型數據庫)
- mysql主從復制
- 2.2 Mongodb(數據分析)
- 2.3 Redis(非關系數據庫)
- 三、自動化運維工具
- 3.1 Cobbler(系統自動化部署)
- 3.2 Ansible(自動化部署)
- 3.3 Puppet(自動化部署)
- 3.4 SaltStack(自動化運維)
- 四、存儲
- 4.1 GFS(文件型存儲)
- 4.2 Ceph(后端存儲)
- 五、運維監控工具
- 5.1 云鏡
- 5.2 ELK
- 六、運維云平臺
- 6.1 Kubernetes
- 6.2 OpenStack
- 介紹
- 安裝
- 七、Devops運維
- 7.1 理念
- 7.2 Devops運維實戰
- 八、編程語言
- 8.1 Shell
- 書籍《Wicked Cool Shell Scripts》
- 8.2 Python
- 8.3 C
- 8.4 Java
- leecode算法與數據結構
- 九、雜記
- 高優先級技能
- 知識點
- JD搜集
- 明顯的短板
- 1.0 Python
- 1.1 Kubernetes
- 1.18.2 《kubernetes in action》
- 遺漏知識點
- 1.18.3 GCP、azure、aliyun
- Azure文檔
- 1.18.5 《program with kubernetes》
- Istio
- HELM
- 《Kubernetes best practice》
- Kubernetes源碼學習
- Scheduler源碼
- 調度器入口
- 調度器框架
- Node篩選算法
- Node優先級算法
- pod搶占調度
- 入口
- 主要代碼結構
- new
- 文章翻譯
- Flannel
- 從二進制集群搭建
- 信息收集
- docker優化
- 1.2 shell
- 面試題
- grep awk sed 常見用法
- shell實踐
- 1.3 Data structure(數據結構)
- Calico
- Aliyun文檔以及重點模塊
- git
- 大數據組件
- 前端,后端,web框架
- cgroup,namespace
- 內核
- Linux搜集
- crontab
- centos7常用優化配置
- centos Mariadb
- eBPF
- ebpf的前世今生
- Linux性能問題排查與分析
- 性能分析搜集
- 性能分析常用10條
- 網絡性能優化
- 文本處理命令
- sql
- Iptables
- python面試題
- iptables
- iptables詳細
- zabbix面試題,proj
- prometheus
- web中間件
- nginx
- Haproxy
- grep sed awk
- Linux常用命令
- 云平臺
- 書籍Linux應用技巧
- kafka
- kafka面試題
- ETCD
- Jenkins
- 3天補充的點
- K8s源碼
- K8s
- k8s實操
- etcd
- test
- BPF
- PSFTP使用
- StackOverflow問答精選
- 問題
- 我對于學習思考
- 修改ssh超時時間
- 課程目錄
- 運維與運維開發
- The Person
- 個人雜談
- mysql主從復制
- 對于工作的認識與思考