linux6 内核参数优化和解释

net.ipv4.ip_forward = 1 开启linux的转发功能,vpn和iptables需要使用
 
fs.file-max = 65535:这个参数表示进程(比如一个worker进程)可以同时打开的最大句柄数,这个参数直线限制最大并发连接数,需根据实际情况配置。(需要配合ulimit 命令来使用)
 
net.ipv4.tcp_tw_reuse = 1:这个参数设置为1,表示允许将TIME-WAIT状态的socket重新用于新的TCP连接,这对于服务器来说很有意义,因为服务器上总会有大量TIME-WAIT状态的连接。
 
net.ipv4.tcp_keepalive_time = 600:这个参数表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2小时,若将其设置的小一些,可以更快地清理无效的连接。
 
net.ipv4.tcp_fin_timeout = 30:这个参数表示当服务器主动关闭连接时,socket保持在FIN-WAIT-2状态的最大时间。
 
net.ipv4.tcp_max_tw_buckets = 5000:这个参数表示操作系统允许TIME_WAIT套接字数量的最大值,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。该参数默认为180 000,过多的TIME_WAIT套接字会使Web服务器变慢。
 
net.ipv4.tcp_max_syn_backlog = 20480:这个参数标示TCP三次握手建立阶段接受SYN请求队列的最大长度,默认为1024,将其设置得大一些可以使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发起的连接请求。(nginx服务器可以大点,其他的内外服务器没必要那么大。10240足够了)
 
net.ipv4.ip_local_port_range = 1024 61000:这个参数定义了在UDP和TCP连接中本地(不包括连接的远端)端口的取值范围。
 
net.ipv4.tcp_rmem = 10240 87380 12582912:这个参数定义了TCP接受缓存(用于TCP接受滑动窗口)的最小值、默认值、最大值。
   #TCP 的性能取决于几个方面的因素。两个最重要的因素是链接带宽(link bandwidth)(报文在网络上传输的速率)和 往返时间(round-trip time) 或 RTT(发送报文与接收到另一端的响应之间的延时)。这两个值确定了称为 Bandwidth Delay Product(BDP)的内容。给定链接带宽和 RTT 之后,您就可以计算出 BDP 的值了,不过这代表什么意义呢?BDP 给出了一种简单的方法来计算理论上最优的 TCP socket 缓冲区大小(其中保存了排队等待传输和等待应用程序接收的数据)。如果缓冲区太小,那么 TCP 窗口就不能完全打开,这会对性能造成限制。如果缓冲区太大,那么宝贵的内存资源就会造成浪费。如果您设置的缓冲区大小正好合适,那么就可以完全利用可用的带宽。下面我们来看一个例子:
   #BDP = link_bandwidth * RTT
   #如果应用程序是通过一个 100Mbps 的局域网进行通信,其 RRT 为 50 ms,那么 BDP 就是:
   #100MBps * 0.050 sec / 8 = 0.625MB = 625KB
   #注意:此处除以 8 是将位转换成通信使用的字节。
   #因此,我们可以将 TCP 窗口设置为 BDP 或 1.25MB。但是在 Linux 2.6 上默认的 TCP 窗口大小是 110KB,这会将连接的带宽限制为 2.2MBps,计算方法如下:
   #throughput = window_size / RTT
   #110KB / 0.050 = 2.2MBps
   #如果使用上面计算的窗口大小,我们得到的带宽就是 12.5MBps,计算方法如下:
   #625KB / 0.050 = 12.5MBps
   #差别的确很大,并且可以为 socket 提供更大的吞吐量。因此现在您就知道如何为您的 socket 计算最优的缓冲区大小了。
   #这个涉及到TCP滑动窗口的12.5MBps并不是咱们机器网卡的带宽而是一个socket在传送了一个TCP包并且还没有收到对方ACK的情况下,可以发送的最大包大小。这样就可以保持忙碌。
net.ipv4.tcp_wmem = 10240 87380 12582912:这个参数定义了TCP发送缓存(用于TCP发送滑动窗口)的最小值、默认值、最大值。
 
net.core.netdev_max_backlog = 8096:当网卡接受数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。这个参数表示该队列的最大值。
 
net.core.rmem_default = 6291456:这个参数表示内核套接字接受缓存区默认的大小。
 
net.core.wmem_default = 6291456:这个参数表示内核套接字发送缓存区默认的大小。
 
net.core.rmem_max = 12582912:这个参数表示内核套接字接受缓存区的最大大小。(一般来说上面的几个wmem,rmem都不用配置,只要这个最大的就可以了,这个大小是传输过程中协商出来的)
 
net.core.wmem_max = 12582912:这个参数表示内核套接字发送缓存区的最大大小。
 
net.ipv4.tcp_syncookies = 1:该参数与性能无关,用于解决TCP的SYN攻击。
kernel.msgmnb = 65536   每个消息队列的最大字节限制,用于进程间通讯的,这个修改一般来说这个值够用了,不够用的话问下开发的程序进程间传输需要多大
 
kernel.msgmax = 65536   每个消息的最大size.同上
 
kernel.shmmax = 68719476736  内核参数定义单个共享内存段的最大值,这个一般来说数据库是要配置的,因为有Oracle有SGA,mysql有share pool都是存放经常使用的sql加快查询速度。不配置也没多大影响。
 
kernel.shmall = 4294967296   参数是控制共享内存页数
posted @ 2017-05-19 15:25  千城program  阅读(282)  评论(0编辑  收藏  举报