Linux System Configuration
# 查看所有的内核参数
sysctl -a
# 查看特定的内核参数
sysctl vm.swappiness
# 临时修改内核参数
sudo sysctl -w vm.swappiness=10
# 持久修改内核参数需要在 /etc/sysctl.conf 文件中添加或修改参数,并使用以下命令使之立即生效:
sudo sysctl -p
常用Linux内核参数 /etc/sysctl.conf
### 系统级打开文件数
fs.file-max = 20000000
### 单用户打开文件数
fs.nr_open = 20000000
### 最大进程数
kernel.pid_max = 65536
# 禁用sysrq(键盘上截图键)
kernel.sysrq = 0
# 交换分区权重
vm.swappiness = 10
# 给生成的core文件加上pid
kernel.core_uses_pid = 1
# 设置临时端口使用范围
net.ipv4.ip_local_port_range = 10000 65535
# 设置预留端口
net.ipv4.ip_local_reserved_ports = 15000-16000,18796,25000-26000,28796
#############################################
#############################################
##### 共享内存: ipcs --help
# 一个消息队列的最大长度 Byte
kernel.msgmnb = 65536
# 从一个进程发送到另一个进程的消息的最大长度 Byte
kernel.msgmax = 65536
kernel.msgmni = 16
# 定义单个共享内存段的最大值,建议物理内存的50%
kernel.shmmax = 2147483648
# 共享内存页大小
kernel.shmall = 524288
#############################################
#############################################
##### 网络: TCP/IP, socket
### 全连接队列长度, (默认 128)
net.core.somaxconn = 4096
### 半连接队列长度, 当使用sysncookies无效 (syn队列, 默认128)
net.ipv4.tcp_max_syn_backlog = 4096
### 开启SYN Cookies(出现SYN等待队列溢出时可防范少量SYN攻击, 和上面不能同事开启)
net.ipv4.tcp_syncookies = 0
### 最大孤儿socket数量,一个孤儿socket占用64KB,当socket主动close掉,处于fin-wait1, last-ack(快速建立大量连接时,需要关注这个值)
net.ipv4.tcp_max_orphans = 10240
### 孤儿socket废弃前重试的次数
net.ipv4.tcp_orphan_retries = 1
### 网卡数据包队列长度
net.core.netdev_max_backlog = 5000
#############################################
### time-wait 最大队列长度 (如果超过这个数, TIME_WAIT套接字将立刻被清除并打 印警告信息)
net.ipv4.tcp_max_tw_buckets = 500
### 开启Selective ACK,用来查找特定丢失数据包,有助于快速恢复状态
### 开启有选择应答模式(允许接收端向发送端传递关于字节流重丢失的序列号,减少不必要的重传)
net.ipv4.tcp_sack = 1
### 开启tcp的滑动窗口
net.ipv4.tcp_window_scaling = 1
#############################################
### 开启TCP连接中TIME-WAIT sockets的快速回收
#net.ipv4.tcp_tw_recycle = 1
### 表示开启重用. 允许将TIME-WAIT sockets重新用于新的TCP连接
net.ipv4.tcp_tw_reuse = 1
#############################################
# tcp报文探测时间间隔, 单位s
net.ipv4.tcp_keepalive_intvl = 30
# tcp连接多少秒后没有数据报文时启动探测报文
net.ipv4.tcp_keepalive_time = 60
# 探测次数(心跳连接失败端口该连接)
net.ipv4.tcp_keepalive_probes = 3
#############################################
### 保持fin-wait-2 状态多少秒
net.ipv4.tcp_fin_timeout = 15
### 每个套接字所允许得最大缓存区大小
net.core.optmem_max = 1048576
#############################################
### 给tcp栈分配的内存大小,单位为 mem page, 通常为 4kb(可通过命令查看: getconf PAGESIZE)(这里调整为: 768MB 1GB 1.5G, 适用于 4GB 内存的服务器)
# 第一个数字表示,当 tcp 使用的 page 少于设置值时,kernel不对其进行任何的干预
# 第二个数字表示,当 tcp 使用的 pages 超过了设置值时,kernel 会进入 "memory pressure" 压力模式
# 第三个数字表示,当 tcp 使用的 pages 超过设置值时,就会报: Out of socket memory
net.ipv4.tcp_mem = 196608 262144 393216
### 为每个TCP连接分配读,写缓冲区大小,单位为: Byte (这里调整为: 4KB 8KB 4M)
# 第一个数字表示,为TCP连接分配的最小内存
# 第一个数字表示,为TCP连接分配的缺省内存
# 第一个数字表示,为TCP连接分配的最大内存
# 第二个,第三个分别被wmem_default, wmem_max覆盖
### 一般按照缺省值分配. 1.6GB TCP内存能容纳的连接数约为: 1600MB/16KB = 100K = 10万, 4.0GB TCP内存能容纳的连接数约为: 4000MB/16KB = 250K = 25万
# 读缓冲区
net.ipv4.tcp_rmem = 4096 8192 4194304
# 写缓冲区
net.ipv4.tcp_wmem = 4096 8192 4194304
### 表示发送套接字缓冲区大小的缺省值
net.core.wmem_default = 8192
### 表示接收套接字缓冲区大小的缺省值
net.core.rmem_default = 8192
### 表示发送套接字缓冲区大小的最大值
net.core.rmem_max = 4194304
### 表示接收套接字缓冲区大小的最大值
net.core.wmem_max = 4194304
#############################################
### 关闭TCP连接中时间戳功能,影响 TIME-WAIT 快速回收
net.ipv4.tcp_timestamps = 0
# * syn-ack握手状态重试次数
net.ipv4.tcp_synack_retries = 2
# * 外向syn握手重试次数
net.ipv4.tcp_syn_retries = 2
# 丢弃活动连接之前的重传次数,超过次数视为掉线
net.ipv4.tcp_retries2 = 3
#############################################
# 关闭ipv6 功能
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
# 响应 ARP 请求
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
#net.ipv4.conf.default.arp_announce = 2
# 开启ipv4路由转发
net.ipv4.ip_forward = 1
# 避免放大攻击
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 开启多网卡下接受多播过滤(发给a网卡,b接受到了就被丢弃掉)
#net.ipv4.conf.default.rp_filter = 1 (阿里云ecs不支持作为DR开启该功能)
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.eth0.rp_filter = 0
# 不接受源路由
net.ipv4.conf.default.accept_source_route = 0
# 检查一次相邻层记录的有效性的周期
net.ipv4.neigh.default.gc_stale_time = 120