进程数和文件数优化
nproc:单个用户可打开的进程最大数
nofile:单个进程打开文件最大数
vim /etc/security/limits.conf
#添加
#soft:软限制;hard:硬限制
#nofile:文件数;nproc:进程数
#*:表示所有用户都生效
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
内核优化
内核官网:
https://www.kernel.org/
fs 相关配置
参考文档:
https://www.kernel.org/doc/html/latest/admin-guide/sysctl/fs.html
fs.file-max = 655350
Linux 内核将分配的最大文件句柄数。
Kernel 相关配置
参考文档:
https://www.kernel.org/doc/html/latest/admin-guide/sysctl/kernel.html
kernel.msgmnb = 65536
msgmnb是IPC(两个进程间通信)队列的最大大小,以字节(bytes)为单位。默认 16384 bytes。
kernel.msgmax = 65536
msgmax是IPC(从一个进程发送到另一个进程的消息)的最大大小,以字节(bytes)为单位。默认 8192 bytes。
进程间的消息传递是在内核的内存中进行的。不会交换到硬盘上。所以如果增加该值,则将增加操作系统所使用的内存数量。
kernel.msgmni = 65536
msgmni是IPC(两个进程间通信)队列的最大数目。默认为 32000。
kernel.shmmax = 68719476736
该参数定义了共享内存段的最大尺寸,以字节(bytes)为单位。内核现在支持高达 1Gb 的共享内存段。
kernel.shmmni = 65536
此值确定共享内存段的最大数目。默认为 4096。
kernel.shmall = 4294967296
在系统范围内使用的共享内存页的总量。因此,shmall 应始终至少为 “shmmax/PAGE_SIZE” 的值。
可通过 “getconf PAGE_SIZE” 获取 PAGE_SIZE 的值。
Network core 相关配置
参考文档:
https://www.kernel.org/doc/html/latest/admin-guide/sysctl/net.html
net.core.netdev_max_backlog = 65535
表示当每个网络接口接受数据包的速率比内核处理这些包的速率快时,会有一个列队保存这些数据包。这个参数表示该列队的最大值。
net.core.wmem_default = 8388608
套接字发送缓冲区的默认设置,以字节(bytes)为单位。
net.core.rmem_default = 8388608
套接字接收缓冲区的默认设置,以字节(bytes)为单位。
net.core.rmem_max = 16777216
最大接收套接字缓冲区大小,以字节(bytes)为单位。
net.core.wmem_max = 16777216
最大发送套接字缓冲区大小,以字节(bytes)为单位。
ip-sysctl 相关配置
参考文档:
https://www.kernel.org/doc/html/latest/networking/ip-sysctl.html
net.ipv4.ip_local_port_range = 1024 65535
定义 UDP 和 TCP 链接的本地端口的取值范围。
net.ipv4.tcp_max_tw_buckets = 2000
允许 TIME_WAIT 套接字数量的最大值。如果超过这个数字,TIME_WAIT 套接字将立刻被清除并打印警告信息。默认为180000,过多的 TIME_WAIT 套接字会使 Web 服务器变慢。
net.ipv4.tcp_tw_reuse = 1
设置为 1,表示允许将 TIME_WAIT 状态的 socket 重新用于新的 TCP 链接。这对于服务器来说意义重大,因为总有大量 TIME_WAIT 状态的链接存在。
net.ipv4.tcp_syncookies = 1
开启 SYN Cookies。当出现 SYN 等待队列溢出时,启用 cookies 来处理,可防范少量 SYN 攻击。默认为 0,表示关闭。
net.ipv4.tcp_syn_retries = 1
活动 TCP 连接尝试的初始 SYN 将被重新传输的次数。不应高于127,默认值为6。
net.ipv4.tcp_synack_retries = 1
被动 TCP 连接尝试的 SYN+ACK 将被重新传输的次数。不应高于255,默认值为5。
net.ipv4.tcp_keepalive_time = 1800
启用 keepalive 时 TCP 发送 keepalive 消息的频率。默认是 2 小时,将其设置为 30 分钟,可以更快的清理无效链接。
net.ipv4.tcp_fin_timeout = 15
如果套接字由本端要求关闭,这个参数决定了它保持在 FIN-WAIT-2 状态的时间。
net.ipv4.tcp_max_syn_backlog = 20000
这个参数表示 TCP 三次握手建立阶段接受 SYN 请求列队的最大长度。还需要检查 net.core.somaxconn 的配置。
net.core.somaxconn = 65535
表示 socket 监听的 backlog(监听队列)上限,默认值为4096。在客户端高并发的请求的情况下,该默认值较小,可能导致连接超时或者重传问题。
net.ipv4.ip_forward = 1
在接口之间转发数据包。默认为 0,表示关闭。
net.ipv4.conf.default.rp_filter = 1
设置为 1,表示严格按 RFC3704 中反向路径的定义,每个传入的数据包都根据 FIB 进行测试,如果接口不是最佳反向路径,则数据包检查将失败。默认情况下,失败的数据包被丢弃。
net.ipv4.conf.default.accept_source_route = 0
处理无源路由的包,仅接受路由标头类型2。
net.ipv4.tcp_sack = 1
启用选择确认(SACK)。
net.ipv4.tcp_window_scaling = 1
启用 RFC1323 中定义的窗口缩放。
net.ipv4.tcp_rmem = 4096 87380 4194304
三个值分别为min、default、max,表示 TCP 套接字使用的最小、初始、最大接收缓冲区大小。
net.ipv4.tcp_wmem = 4096 16384 4194304
三个值分别为min、default、max,表示 TCP 套接字使用的最小、初始、最大发送缓冲区大小。
net.ipv4.tcp_max_orphans = 3276800
系统持有的未附加到任何用户文件句柄的最大 TCP 套接字数。如果超过此数字,则立即重置孤立连接并打印警告。此限制的存在只是为了防止简单的 DoS 攻击。
net.ipv4.tcp_timestamps = 0
设置为 0,表示关闭 RFC1323 中定义的时间戳。默认 1,表示开启。
net.ipv4.tcp_mem = 94500000 915000000 927000000
三个值分别为min、pressure、max,当 TCP 分配的内存量超过 pressure 定义的页数时,TCP 会降低其内存消耗并进入 pressure 模式,当内存消耗低于 min 定义的页数时退出 pressure 模式。max 表示所有 TCP 套接字允许排队的页面数。