# 系统所有进程一共可以打开的文件数量, 每个套接字也占用一个文件描述字
fs.file-max=1491124
# 增大内核 backlog 参数,使得系统能够保持更多的尚未完成 TCP 三次握手的套接字。
net.core.somaxconn=1048576
net.core.netdev_max_backlog=1048576
net.ipv4.tcp_max_syn_backlog=1048576
# 增大应用程序可用端口范围。
net.ipv4.ip_local_port_range=1024 65000
net.ipv4.ip_local_reserved_ports=3000,3306,6379,27017,27018
# 系统中最多有多少个 TCP 套接字不被关联到任何一个用户文件句柄上
net.ipv4.tcp_max_orphans=131072

# 启用 TIME_WAIT 复用,使得结束 TIEM_WAIT 状态的套接字的端口可以立刻被其他套接字使用。 在只有 60000 多个端口可用的情况下,配置如下
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_max_tw_buckets=55000

# 优化 nf_conntrack 参数,防止服务器在大量短链接场景下出现丢包
net.nf_conntrack_max=1048576
net.netfilter.nf_conntrack_max=1048576
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
net.netfilter.nf_conntrack_tcp_timeout_close_wait=15
net.netfilter.nf_conntrack_tcp_timeout_established=300

# 缩短套接字处于 TIME_WAIT 的时间, 60s -> 15s
net.ipv4.tcp_fin_timeout=15
# 减小 tcp keepalive 探测次数,可以即时释放长链接
net.ipv4.tcp_keepalive_probes=3
# 缩短 tcp keepalive 探测间隔时间,同上
net.ipv4.tcp_keepalive_intvl=15
# 修改 tcp keepalive 默认超时时间
net.ipv4.tcp_keepalive_time=7200

# 关闭慢启动重启(Slow-Start Restart), SSR 对于会出现突发空闲的长周期 TLS 连接有很大的负面影响
net.ipv4.tcp_slow_start_after_idle=0
# 启用 MTU 探测,在链路上存在 ICMP 黑洞时候有用(大多数情况是这样)
net.ipv4.tcp_mtu_probing=1
# 打开内核的 SYN Cookie 功能,可以防止部分 DOS 攻击。
net.ipv4.tcp_syncookies=1
# 当某个节点可用内存不足时, 系统会倾向于从其他节点分配内存。对 Mongo/Redis 类 cache 服务器友好
vm.zone_reclaim_mode=0
# 当内存使用率不足10%(默认值60%)时使用 swap,尽量避免使用 swap,减少唤醒软中断进程
vm.swappiness=10
# 内核执行无内存过量使用处理。使用这个设置会增大内存超载的可能性,但也可以增强大量使用内存任务 Mongo/Redis 的性能。
vm.overcommit_memory=1

# 指定 fair queue 算法, 为了配合 google bbr 算法,否则会产生 hrtimer 的时钟中断的开销
net.core.default_qdisc=fq
# 使用 google bbr 拥塞控制算法。
net.ipv4.tcp_congestion_control=bbr
# 优化 http2 性能, https://blog.cloudflare.com/http-2-prioritization-with-nginx/
# net.ipv4.tcp_notsent_lowat = 16384

# 启用 ip forwarding
#net.ipv4.ip_forward=1
#net.ipv4.conf.enp0s6.route_localnet=1


# 启用 tcp fast open
# net.ipv4.tcp_fastopen=3

# 禁用 ipv6
# net.ipv6.conf.all.disable_ipv6=1
# net.ipv6.conf.default.disable_ipv6=1
# net.ipv6.conf.lo.disable_ipv6=1

# 增加初始拥塞窗口和滑动窗口,提高 Proxy 业务性能
# see https://www.cdnplanet.com/blog/initcwnd-settings-major-cdn-providers/
# sudo ip route change $(ip route show|grep '^default'|head -1) initcwnd 10 initrwnd 25

# 增加当前服务器进程的文件打开数目,解决 too many open files 错误
# sudo ss -anptl | grep -oP 'pid=\K[0-9]+' | xargs -i sudo prlimit --pid {} --nofile=1048576

# 永久增加文件打开数目,解决 too many open files 错误,需要重启系统生效
# curl https://phus.lu/sysctl.conf | sudo tee /etc/sysctl.d/10-phuslu.conf && echo -e "* soft nofile 1048576\n* hard nofile 1048576\n* soft nproc 10240\n* hard nproc 10240\n" | sudo tee /etc/security/limits.d/99-phuslu.conf