Linux系统内核参数优化

匿名 (未验证) 提交于 2019-12-02 21:59:42

Linux系统常用的内核参数及定义总结如下:

以下内核参数配置仅供参考,具体使用应当根据业务环境特性及服务器硬件配置来设置合理的值。

net.ipv4.ip_nonlocal_bind = 1  #允许非本地IP地址socket监听,当主机作为网关、反向代理或负载均衡器实现双机热备高可用时,主机需要绑定监听虚拟VIP地址时,必须开启此项。  net.ipv4.ip_forward = 1  #开启IPv4转发。当服务器作为路由网关、反向代理与负载均衡(开启客户端IP透传时)必须开启。  net.ipv4.tcp_timestamps = 1  #开启TCP时间戳,以一种比重发超时更精确的方法(请参阅 RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。默认为0不启用。  fs.file-max = 6553560  #系统所有进程一共可以打开的文件数量,即系统当前最大的文件句柄数,属于系统级别的限制,默认值大小通常与系统物理内存有关。注意:ulimit的open file值(默认1024)是单个进程可以打开的最大文件数,在高并发业务下,这个2个值都需要进行调整。  net.ipv4.tcp_tw_reuse = 1  #默认为0不启用,设置为1启用tcp复用,表示允许将TIME_WAIT状态的socket重新用于新的TCP链接,这对于高并发的服务器来说意义重大,因为总有大量TIME_WAIT状态的链接存在。  net.ipv4.tcp_tw_recycle = 1  #默认为0表示关闭,为1时表示开启TCP连接中TIME-WAIT sockets的快速回收,用于大量TIME_OUT场景。  net.ipv4.tcp_keepalive_time = 600  #当keepalive启用时,TCP发送keepalive消息的频度;默认是2小时,将其设置为10分钟,可更快的清理无效链接。  net.ipv4.tcp_keepalive_probes = 3 #当keepalive启用时,如果对方不予应答,探测包的发送次数。  net.ipv4.tcp_keepalive_intvl = 15  #当keepalive启用时,keepalive探测包的发送间隔,单位为秒。  net.ipv4.tcp_fin_timeout = 30  #当服务器主动关闭链接时,socket保持在FIN_WAIT_2状态的最长时间,单位为秒。  net.ipv4.tcp_syn_retries = 1  #在内核放弃建立连接之前发送SYN包的数量  net.ipv4.tcp_syncookies = 1  #与性能无关,用于解决TCP的SYN攻击。1表示开启TCP SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭。  net.ipv4.icmp_echo_ignore_broadcasts = 1  #忽略icmp ping广播包,避免放大攻击。  net.ipv4.icmp_ignore_bogus_error_responses = 1  #开启恶意icmp错误消息保护  net.inet.udp.checksum=1  #防止不正确的udp包的攻击  net.ipv4.conf.default.accept_source_route = 0  #是否接受含有源路由信息的ip包。参数值为布尔值,1表示接受,0表示不接受。在充当网关的linux主机上缺省值应为1,在一般的linux主机上缺省值应为0。从安全性角度出发,建议关闭该功能。  net.ipv4.tcp_slow_start_after_idle = 0  #关闭tcp的连接传输的慢启动,即先休止一段时间,再初始化拥塞窗口。  net.ipv4.route.gc_timeout = 100  #路由缓存刷新频率,当一个路由失败后多长时间跳到另一个路由,默认是300秒。  net.ipv4.tcp_max_tw_buckets = 5000  #表示操作系统允许保持TIME_WAIT套接字数量的最大值,如超过此值,TIME_WAIT套接字将立刻被清除并打印警告信息,默认为8000,过多的TIME_WAIT套接字会使服务器响应变慢。  net.ipv4.ip_local_port_range = 1024 65000  #定义UDP和TCP链接的本地端口的取值范围。  net.ipv4.tcp_rmem = 10240 87380 12582912  #定义了TCP接受socket请求缓存的内存最小值、默认值、最大值。  net.ipv4.tcp_wmem = 10240 87380 12582912  #定义TCP发送缓存的最小值、默认值、最大值。该值为自动调优定义每个 socket 使用的内存。 #第一个值是为 socket 的发送缓冲区分配的最少字节数。 #第二个值是默认值(该值会被 wmem_default 覆盖),缓冲区在系统负载不重的情况下可以增长到这个值。 #第三个值是发送缓冲区空间的最大字节数(该值会被 wmem_max 覆盖)。  net.core.netdev_max_backlog = 8096  #当网卡接收数据包的速度大于内核处理速度时,会有一个缓冲队列保存这些数据包。这个参数表示该列队的最大值。  net.core.somaxconn=262114  #选项默认值是128,表示socket监听的backlog(监听队列)上限。这个参数用于调节系统同时发起的TCP连接数,在高并发的请求中,默认的值可能会导致链接超时或者重传,因此需要结合高并发请求数来调节此值。  net.core.optmem_max = 10000000  #该参数指定了每个套接字所允许的最大缓冲区的大小(以字节为单位)  net.core.rmem_default = 6291456  #表示内核接收套接字缓冲区默认大小(以字节为单位)。该参数定义了默认的发送窗口大小,对于更大的 BDP 来说,这个大小也应该更大。  net.core.wmem_default = 6291456  #表示内核发送套接字缓冲区默认大小(以字节为单位)  net.core.rmem_max = 12582912  #表示内核接收套接字缓冲区最大大小(以字节为单位)。该参数定义了默认的发送窗口大小,对于更大的 BDP 来说,这个大小也应该更大。  net.core.wmem_max = 12582912  #表示内核发送套接字缓冲区最大大小(以字节为单位)  net.ipv4.tcp_mem #确定 TCP 栈应该如何反映内存使用;每个值的单位都是内存页(通常是 4KB)。 #第一个值是内存使用的下限。 #第二个值是内存压力模式开始对缓冲区使用应用压力的上限。 #第三个值是内存上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的 BDP 可以增大这些值(其单位是内存页,而不是字节)。  net.ipv4.tcp_max_syn_backlog = 8192  #这个参数表示TCP三次握手建立阶段接受SYN请求列队的较大长度,默认1024,将其设置的大一些可使出现服务器程序繁忙来不及accept新连接时,可以容纳更多等待连接的网络连接数,Linux不至于丢失客户端发起的链接请求。  net.ipv4.tcp_max_orphans=262114  #选项用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤立链接将立即被复位并输出警告信息。这个限制指示为了防止简单的DOS攻击,不用过分依靠这个限制甚至认为的减小这个值,更多的情况是增加这个值。  net.ipv4.netfilter.ip_conntrack_max=204800  #设置系统开始iptables防火墙对TCP连接进行状态跟踪的最大队列长度限制,超过此限定值,将会发生数据表溢出丢弃,对于高并发业务通常也可以使用iptables的raw表设置免跟踪处理。  net.ipv4.conf.all.rp_filter = 1  #用于控制系统是否开启对数据包源地址的校验,1为严谨模式  (推荐),0为松散模式。默认为1开启。  net.ipv4.conf.default.rp_filter = 1  #用于控制系统是否开启对数据包源地址的校验,1为严谨模式  (推荐),0为松散模式。默认为1开启。  net.ipv4.tcp_congestion_control = cubic  #TCP拥塞控制算法,centos7默认设置是cubic。Linux内核中提供了若干套TCP拥塞控制算法,已加载进内核的可以通过内核参数net.ipv4.tcp_available_congestion_control看到:sudo sysctl net.ipv4.tcp_available_congestion_control 没有加载进内核的一般是编译成了模块,可以用modprobe加载。这些算法各自适用于不同的环境。reno是最基本的拥塞控制算法,也是TCP协议的实验原型。bic适用于rtt较高但丢包极为罕见的情况,比如北美和欧洲之间的线路,这是2.6.8到2.6.18之间的Linux内核的默认算法。cubic是修改版的bic,适用环境比bic广泛一点,它是2.6.19之后的linux内核的默认算法。hybla适用于高延时、高丢包率的网络,比如卫星链路――同样适用于中美之间的链路。多人实验表明,TCP拥塞控制算法对TCP传输速率的影响可很大。修改TCP拥塞控制算法需要修改内核参数net.ipv4.tcp_congestion_control=xxx  net.ipv4.tcp_window_scaling = 0  #关闭tcp_window_scaling,启用 RFC 1323 定义的 window scaling;要支持超过64KB的窗口,必须启用该值。  net.ipv4.tcp_ecn = 0  #关闭TCP的直接拥塞通告(tcp_ecn)  net.ipv4.tcp_sack = 1  #关闭tcp_sack,启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段),(对于广域网通信来说)这个选项应该启用,但是这会增加对CPU的占用。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!