内核调优
配置文件:/etc/sysctl.conf
fs.file-max = 999999 #表示进程(比如一个worker进程)可以同时打开的最大句柄数,这个参数直线限制最大并发连接数,需根据实际情况配置
net.ipv4.ip_forward = 0 #不充当路由器
net.ipv4.conf.default.rp_filter = 1 #控制系统是否开启对数据包源地址的校验
#0 不开启源地址校验
#1 开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包
#2 开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包
net.ipv4.conf.default.accept_source_route = 0 #使用sysrq组合键是了解系统目前运行情况,为安全起见设为0关闭
kernel.sysrq = 0 #控制系统调试内核的功能,不同的值对应不同的功能
#0 完全禁用 sysrq 组合键
#1 启用 sysrq 组合键的全部功能
#2 启用控制台日志级别控制
#4 启用键盘控制(SAK、unraw)
#8 启用进程的调试信息输出等
#16 启用同步命令
#32 启用重新挂载为只读
#64 启用进程信号(终止、杀死、溢出杀死)
#128 允许重启/关机
#256 控制实时任务的优先级控制(nicing)
kernel.core_uses_pid = 1 #core_uses_pid 可以控制 core 文件的文件名中是否添加 pid 作为扩展名
#设置为1,表示添加 pid 作为扩展名,生成的 core 文件格式为 core.xxx;设置为0(默认),表示生成的 core 文件统一命名为 core
net.ipv4.tcp_syncookies = 1 #开启SYN Cookies 当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
kernel.msgmnb = 65536 #规定了一个消息队列的最大值,即一个消息队列的容量,msgmnb 控制可以使用的共享内存的总页数
#Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍
#一个共享内存段的最大大小是 16G,那么需要共享内存页数是16GB / 4KB = 16777216KB / 4KB = 4194304(页)
kernel.msgmax = 65536 #进程间的消息传递是在内核的内存中进行的。msgmax 指定了消息队列中消息的最大值(65536B=64KB)
kernel.shmmax = 68719476736 #内核所允许的最大共享内存段的大小(bytes)
kernel.shmall = 4294967296 #表示在任何给定时刻,系统上可以使用的共享内存的总量(bytes)
net.ipv4.tcp_max_tw_buckets = 6000 #系统同时保持TIME_WAIT套接字的最大数量,默认180000,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息
#对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于 Squid,效果却不大
#此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死
net.ipv4.tcp_sack = 1 #启用有选择的应答(1表示启用)
#通过有选择地应答乱序接收到的报文来提高性能,让发送者只发送丢失的报文段,(对于广域网通信来说)这个选项应该启用,但是会增加对CPU的占用
net.ipv4.tcp_window_scaling = 1 #tcp窗口大于64K时,必须开启此值
net.ipv4.tcp_rmem = 10240 87380 12582912 #定义了TCP接受缓存(用于TCP接受滑动窗口)的最小值、默认值、最大值
net.ipv4.tcp_wmem = 10240 87380 12582912 #定义了TCP发送缓存(用于TCP发送滑动窗口)的最小值、默认值、最大值
net.core.wmem_default = 8388608 #表示内核套接字发送缓存区默认的大小
net.core.rmem_default = 8388608 #表示内核套接字接受缓存区默认的大小
net.core.rmem_max = 16777216 #表示内核套接字接受缓存区的最大大小
net.core.wmem_max = 16777216 #表示内核套接字发送缓存区的最大大小
net.core.netdev_max_backlog = 262144 #每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.somaxconn = 40960 #web 应用中 listen 函数的 backlog 默认会给我们内核参数的
#对于一个TCP连接,Server与Client需要通过三次握手来建立网络连接
#当三次握手成功后,我们可以看到端口的状态由LISTEN转变为ESTABLISHED,接着这条链路上就可以开始传送数据了
#每一个处于监听(Listen)状态的端口,都有自己的监听队列.监听队列的长度与如somaxconn参数和使用该端口的程序中listen()函数有关
#somaxconn定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值为128
#对于一个经常处理新连接的高负载 web服务环境来说,默认的 128 太小了。大多数环境这个值建议增加到 1024 或者更多
#大的侦听队列对防止拒绝服务 DoS 攻击也会有所帮助
net.ipv4.tcp_max_orphans = 3276800 #系统中最多有多少个 TCP 套接字不被关联到任何一个用户文件句柄上
#这个限制仅仅是为了防止简单的 DoS 攻击,不能郭飞依赖依靠它或者认为地减小这个值,如果增加了内存之后,更应该增加这个值
net.ipv4.tcp_max_syn_backlog = 262144 #SYN队列的长度,默认为1024,加大队列长度为262144,可以容纳更多等待连接的网络连接数
net.ipv4.tcp_timestamps = 0 #用于设置时间戳,可以避免序列号的卷绕
#一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。设置为 0 表示将其关掉
net.ipv4.tcp_synack_retries = 1 #内核放弃连接之前发送 SYN+ACK 包的数量
net.ipv4.tcp_syn_retries = 1 #在内核放弃建立连接之前发送 SYN 包的数量
net.ipv4.tcp_tw_recycle = 1 #开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1 #开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_mem = 94500000 915000000 927000000 #TCP的内存大小,其单位是页,1页等于4096字节
net.ipv4.tcp_fin_timeout = 30 #修改系統默认的 TIMEOUT 时间
net.ipv4.tcp_keepalive_time = 1200 #当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时
net.ipv4.ip_local_port_range = 1024 65000 #用于向外连接的端口范围。缺省情况下很小:32768到61000
#执行命令使内核参数生效
sysctl -p