精华内容
下载资源
问答
  • 内核参数

    内核参数

    本文总结Linux内核中关于TCP协议相关的内核参数含义及其相关配置。目的是指出可能在某些情况下提高TCP网络性能的潜在内核可调参数,请确保在进行调整之前和之后进行测试以获得可测量的定量结果。

    TCP状态转移图

    在这里插入图片描述
    TCP连接的任意一端,在任一时刻都处于某一状态,当前状态可以通过netstat命令查看。上图中的粗虚线表示典型的服务器端的状态转移图,粗实线表示典型客户端连接的状态转移图。

    建立连接相关选项

    TCP连接建立需要3次握手,对于服务器侧来说,其维护一个内部的SYNC队列,加大队列长度为可以容纳更多等待连接的网络连接数:

    net.ipv4.tcp_max_syn_backlog = 131072
    

    客户端发起SYNC连接,如果超时会进行重传,重传次数会由下列参数进行设置:

    net.ipv4.tcp_syn_retries = 2
    

    当服务器接收到客户端发送的SYNC连接请求报文后,回应SYNC+ACK报文,并等待客户端的ACK确认,如果超时会进行重传,重传次数由下列参数设置:

    net.ipv4.tcp_synack_retries = 2
    

    TCP进行相应次数的重连操作均失败的情况下,将通知应用层。
    预防半连接攻击,SYN-Cookie是一种有效的机制,它的基本原理非常简单,那就是“完成三次握手前不为任何一个连接分配任何资源”,详细可参考RFC4987 TCP SYN Flooding Attacks and Common Mitigations,参考资料1对具体实现原理进行了讲解,可参考阅读。内核提供了参数,可以用于开启或关闭此项功能:

    net.ipv4.tcp_syncookies = 1
    

    关闭连接相关选项

    当客户端发送FIN结束报文,并接收到服务器的ACK确认报文后,客户端将处于FIN_WAIT_2状态,并等待服务器发送结束报文段,才能转移到TIME_WAIT状态,否则它将一直停留在这个状态。客户端处在这个状态时,连接处于半连接状态,并可以继续接收服务器端发送过来的数据。连接停留在FIN_WAIT_2状态的情况可能发生在:客户端执行半关闭后,未等服务器关闭连接就强行退出。此时服务器端连接由内核来接管,被称之为孤儿连接(orphan)。Linux为了防止孤儿连接长时间存留在内核中,定义了两个内核变量:

    net.ipv4.tcp_max_orphans = 262144
    net.ipv4.tcp_fin_timeout = 5
    

    前者定义了内核接管的最大孤儿连接数,后者指定孤儿连接在内核中生存的时间。
    客户端连接在接收到服务器端端结束报文(FIN)之后,并没有直接进入CLOSED状态,而是转移到TIME_WAIT状态。在这个状态,客户端连接要等待2MSL(Maximum Segment Life, 报文段最大生存时间)长时间,才能完全关闭,标准RFC1122推荐为2分钟。

    net.ipv4.tcp_max_tw_buckets = 1200000
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_tw_reuse = 1
    

    其中tcp_max_tw_buckets表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息;tcp_tw_recycle表示是否开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;tcp_tw_reuse表示是否允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭。

    高性能扩展选项

    RFC7323 TCP Extensions for High Performance文档中详细讨论了为提高性能而对TCP选项的扩展,详细内容可以参考该文档。

    net.ipv4.tcp_sack

    启用或关闭选择确认(Selective Acknowledgement, SACK)选项。TCP通信时,如果某个TCP报文段丢失,则TCP模块会重传被确认的TCP报文段后续的所有报文段。这样已经正确传输的TCP报文段也可能重复发送,从而降低TCP的性能。SACK技术正是为改善这种情况而产生的,它使TCP模块只重新发送丢失的TCP报文段,不用发送所有未被确认的TCP报文段。选择性确认项用于在连接初始化时,表示是否支持SACK功能。

    net.ipv4.tcp_timestamps

    启用或关闭时间戳选项。该选项提供了较为准确的计算通信双方之间的回路时间(Round Trip Time)RTT的方法,从而为TCP流量控制提供重要的信息。

    net.ipv4.tcp_window_scaling

    启用或关闭窗口扩大因子选项。在TCP的头部中,接收通告窗口大小时用16位表示,故最大为65535字节,但实际上TCP模块允许的接收通告窗口大小远不止这个数(提高TCP通信的吞吐量)。窗口扩大因子解决了这个问题。假设TCP头部中的接收通告窗口大小是N,窗口扩大因子(移位数)是M,则TCP报文段段实际接收通告窗口是N乘于2的M次方。M的取值范围为0~14。

    配置

    确保下列选项都被配置为缺省值1,打开相关的配置选项。

    sysctl net.ipv4.tcp_window_scaling
    sysctl net.ipv4.tcp_timestamps
    sysctl net.ipv4.tcp_sack
    

    缓存

    使用setsockopt()增加TCP max缓冲区大小(32MB):

    net.core.rmem_max = 33554432
    net.core.wmem_max = 33554432
    

    要增加Linux自动调整TCP缓冲区限制要使用的最小,默认和最大字节数,1GE的最大值为16MB,10GE的最大值为32M或54M:

    net.ipv4.tcp_rmem = 4096 87380 33554432
    net.ipv4.tcp_wmem = 4096 65536 33554432
    

    net.ipv4.tcp_mem参数用于配置系统对TCP内存配置:
    TCP Autotuning setting. “The tcp_mem variable defines how the TCP stack should behave when it comes to memory usage. … The first value specified in the tcp_mem variable tells the kernel the low threshold. Below this point, the TCP stack do not bother at all about putting any pressure on the memory usage by different TCP sockets. … The second value tells the kernel at which point to start pressuring memory usage down. … The final value tells the kernel how many memory pages it may use maximally. If this value is reached, TCP streams and packets start getting dropped until we reach a lower memory usage again. This value includes all TCP sockets currently in use.”

    tcp_mem有3个参数,单位为页(4096字节):low, pressure, high

    low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
    pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
    high:允许所有tcp sockets用于排队缓冲数据报的页面量,当内存占用超过此值,系统拒绝分配socket,后台日志输出“TCP: too many of orphaned sockets”。
    一般情况下这些值是在系统启动时根据系统内存数量计算得到的。 根据当前tcp_mem最大内存页面数是1864896,当内存为(1864896*4)/1024K=7284.75M时,系统将无法为新的socket连接分配内存,即TCP连接将被拒绝。

    NIC配置

    NIC上有一个选项txqueuelen可以用来提高TCP性能,对于RTT值比较大的传输路径,可以增大该值:

    [jinguang1@localhost ~]$ ifconfig eth0 txqueuelen 2000
    

    参考资料

    1. SYN-COOKIE概述
    展开全文
  • Linux内核参数和模块参数

    千次阅读 2013-07-01 15:19:59
    这里的内核参数指通过内核加载器,如GRUB传递给内核的参数   内核参数 内核中大部分的内核参数使用宏__setup来定义 在内核代码树下使用-rin "__setup(\"*\""查看定义了哪些参数 例如__setup("selinux=", ...

    内核代码文档kernel-parameters.txt中列出了内核支持的参数

    这里的内核参数指通过内核加载器,如GRUB传递给内核的参数

     

    内核参数

    内核中大部分的内核参数使用宏__setup来定义

    在内核代码树下使用-rin "__setup(\"*\""查看定义了哪些参数

    例如__setup("selinux=", selinux_enabled_setup);

     

    使用宏early_param定义需要及早处理的内核参数

    例如early_param("hugepagesz", hugetlb_setup_sz);

     

    使用宏core_param来定义真正的内核参数

    这些参数不与其所在的C代码文件有特殊关系

    例如core_param(initcall_debug, initcall_debug, bool, 0644);

     

    模块参数

    使用宏module_param来定义模块加载时可以传递的参数

    例如module_param(ip_list_tot, uint, 0400);

     

     

     

     

    展开全文
  • Linux内核参数配置

    千次阅读 2018-04-13 10:45:19
    Linux内核参数配置Linux在系统运行时修改内核参数(/proc/sys与/etc/sysctl.conf),而不需要重新引导系统,这个功能是通过/proc虚拟文件系统实现的。在/proc/sys目录下存放着大多数的内核参数,并且设计成可以在系统...

    Linux内核参数配置

    Linux在系统运行时修改内核参数(/proc/sys与/etc/sysctl.conf),而不需要重新引导系统,这个功能是通过/proc虚拟文件系统实现的。

    在/proc/sys目录下存放着大多数的内核参数,并且设计成可以在系统运行的同时进行更改, 可以通过更改/proc/sys中内核参数对应的文件达到修改内核参数的目的(修改过后,保存配置文件就马上自动生效),不过重新启动机器后之前修改的参数值会失效,所以只能是一种临时参数变更方案。(适合调试内核参数优化值的时候使用,如果设置值有问题,重启服务器还原原来的设置参数值了。简单方便。)
     
    但是如果调试内核参数优化值结束后,需要永久保存参数值,就要通过修改/etc/sysctl.conf内的内核参数来永久保存更改。但只是修改sysctl文件内的参数值,确认保存修改文件后,设定的参数值并不会马上生效,如果想使参数值修改马上生效,并且不重启服务器,可以执行下面的命令:
    #sysctl –p
     
    下面介绍一下/proc/sys下内核文件与配置文件sysctl.conf中变量的对应关系:
    由于可以修改的内核参数都在/proc/sys目录下,所以sysctl.conf的变量名省略了目录的前面部分(/proc/sys)。
     
    即将/proc/sys中的文件转换成sysctl中的变量依据下面两个简单的规则:
    1.去掉前面部分/proc/sys
    2.将文件名中的斜杠变为点
    这两条规则可以将/proc/sys中的任一文件名转换成sysctl中的变量名。
     
    例如:
    /proc/sys/net/ipv4/ip_forward =》 net.ipv4.ip_forward
    /proc/sys/kernel/hostname =》 kernel.hostname
     
    可以使用下面命令查询所有可修改的变量名
    # sysctl –a
     

     

    1、linux内核参数注释

    以下表格中红色字体为常用优化参数

    根据参数文件所处目录不同而进行分表整理

    下列文件所在目录:/proc/sys/net/ipv4/

    名称

    默认值

    建议值

    描述

    tcp_syn_retries

    5

    1

    对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。。(对于大负载而物理通信良好的网络而言,这个值偏高,可修改为2.这个值仅仅是针对对外的连接,对进来的连接,是由tcp_retries1决定的)

    tcp_synack_retries

    5

    1

    对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。不应该大于255,默认值是5,对应于180秒左右时间。

    tcp_keepalive_time

    7200

    600

    TCP发送keepalive探测消息的间隔时间(秒),用于确认TCP连接是否有效。

    防止两边建立连接但不发送数据的攻击。

    tcp_keepalive_probes

    9

    3

    TCP发送keepalive探测消息的间隔时间(秒),用于确认TCP连接是否有效。

    tcp_keepalive_intvl

    75

    15

    探测消息未获得响应时,重发该消息的间隔时间(秒)。默认值为75秒。 (对于普通应用来说,这个值有一些偏大,可以根据需要改小.特别是web类服务器需要改小该值,15是个比较合适的值)

    tcp_retries1

    3

    3

    放弃回应一个TCP连接请求前﹐需要进行多少次重试。RFC规定最低的数值是3

    tcp_retries2

    15

    5

    在丢弃激活(已建立通讯状况)的TCP连接之前﹐需要进行多少次重试。默认值为15,根据RTO的值来决定,相当于13-30分钟(RFC1122规定,必须大于100秒).(这个值根据目前的网络设置,可以适当地改小,我的网络内修改为了5)

    tcp_orphan_retries

    7

    3

    在近端丢弃TCP连接之前﹐要进行多少次重试。默认值是7个﹐相当于 50秒 - 16分钟﹐视 RTO 而定。如果您的系统是负载很大的web服务器﹐那么也许需要降低该值﹐这类 sockets 可能会耗费大量的资源。另外参的考tcp_max_orphans。(事实上做NAT的时候,降低该值也是好处显著的,我本人的网络环境中降低该值为3)

    tcp_fin_timeout

    60

    2

    对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。默认值为 60 秒。

    tcp_max_tw_buckets

    180000

    36000

    系统在同时所处理的最大 timewait sockets 数目。如果超过此数的话﹐time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐不过﹐如果网络条件需要比默认值更多﹐则可以提高它(或许还要增加内存)。(事实上做NAT的时候最好可以适当地增加该值)

    tcp_tw_recycle

    0

    1

    打开快速 TIME-WAIT sockets 回收。除非得到技术专家的建议或要求﹐请不要随意修改这个值。(做NAT的时候,建议打开它)

    tcp_tw_reuse

    0

    1

    表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接(这个对快速重启动某些服务,而启动后提示端口已经被使用的情形非常有帮助)

    tcp_max_orphans

    8192

    32768

    系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量﹐那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要依赖这个或是人为的降低这个限制。如果内存大更应该增加这个值。(这个值Redhat AS版本中设置为32768,但是很多防火墙修改的时候,建议该值修改为2000)

    tcp_abort_on_overflow

    0

    0

    当守护进程太忙而不能接受新的连接,就象对方发送reset消息,默认值是false。这意味着当溢出的原因是因为一个偶然的猝发,那么连接将恢复状态。只有在你确信守护进程真的不能完成连接请求时才打开该选项,该选项会影响客户的使用。(对待已经满载的sendmail,apache这类服务的时候,这个可以很快让客户端终止连接,可以给予服务程序处理已有连接的缓冲机会,所以很多防火墙上推荐打开它)

    tcp_syncookies

    0

    1

    只有在内核编译时选择了CONFIG_SYNCOOKIES时才会发生作用。当出现syn等候队列出现溢出时象对方发送syncookies。目的是为了防止syn flood攻击。

    tcp_stdurg

    0

    0

    使用 TCP urg pointer 字段中的主机请求解释功能。大部份的主机都使用老旧的 BSD解释,因此如果您在 Linux打开它﹐或会导致不能和它们正确沟通。

    tcp_max_syn_backlog

    1024

    16384

    对于那些依然还未获得客户端确认的连接请求﹐需要保存在队列中最大数目。对于超过 128Mb 内存的系统﹐默认值是 1024 ﹐低于 128Mb 的则为 128。如果服务器经常出现过载﹐可以尝试增加这个数字。警告﹗假如您将此值设为大于 1024﹐最好修改include/net/tcp.h里面的TCP_SYNQ_HSIZE﹐以保持TCP_SYNQ_HSIZE*16(SYN Flood攻击利用TCP协议散布握手的缺陷,伪造虚假源IP地址发送大量TCP-SYN半打开连接到目标系统,最终导致目标系统Socket队列资源耗尽而无法接受新的连接。为了应付这种攻击,现代Unix系统中普遍采用多连接队列处理的方式来缓冲(而不是解决)这种攻击,是用一个基本队列处理正常的完全连接应用(Connect()和Accept() ),是用另一个队列单独存放半打开连接。这种双队列处理方式和其他一些系统内核措施(例如Syn-Cookies/Caches)联合应用时,能够比较有效的缓解小规模的SYN Flood攻击(事实证明)

    tcp_window_scaling

    1

    1

    该文件表示设置tcp/ip会话的滑动窗口大小是否可变。参数值为布尔值,为1时表示可变,为0时表示不可变。tcp/ip通常使用的窗口最大可达到 65535 字节,对于高速网络,该值可能太小,这时候如果启用了该功能,可以使tcp/ip滑动窗口大小增大数个数量级,从而提高数据传输的能力(RFC 1323)。(对普通地百M网络而言,关闭会降低开销,所以如果不是高速网络,可以考虑设置为0)

    tcp_timestamps

    1

    1

    Timestamps 用在其它一些东西中﹐可以防范那些伪造的sequence 号码。一条1G的宽带线路或许会重遇到带 out-of-line数值的旧sequence 号码(假如它是由于上次产生的)。Timestamp 会让它知道这是个 '旧封包'。(该文件表示是否启用以一种比超时重发更精确的方法(RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。)

    tcp_sack

    1

    1

    使用 Selective ACK﹐它可以用来查找特定的遗失的数据报--- 因此有助于快速恢复状态。该文件表示是否启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段)。(对于广域网通信来说这个选项应该启用,但是这会增加对 CPU 的占用。)

    tcp_fack

    1

    1

    打开FACK拥塞避免和快速重传功能。(注意,当tcp_sack设置为0的时候,这个值即使设置为1也无效)[这个是TCP连接靠谱的核心功能]

    tcp_dsack

    1

    1

    允许TCP发送"两个完全相同"的SACK。

    tcp_ecn

    0

    0

    TCP的直接拥塞通告功能。

    tcp_reordering

    3

    6

    TCP流中重排序的数据报最大数量。 (一般有看到推荐把这个数值略微调整大一些,比如5)

    tcp_retrans_collapse

    1

    0

    对于某些有bug的打印机提供针对其bug的兼容性。(一般不需要这个支持,可以关闭它)

    tcp_wmemmindefaultmax

    4096

    16384

    131072

    8192

    131072

    16777216

    发送缓存设置

    min:为TCP socket预留用于发送缓冲的内存最小值。每个tcp socket都可以在建议以后都可以使用它。默认值为4096(4K)。

    default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem_default 值,一般要低于net.core.wmem_default的值。默认值为16384(16K)。

    max: 用于TCP socket发送缓冲的内存最大值。该值不会影响net.core.wmem_max,"静态"选择参数SO_SNDBUF则不受该值影响。默认值为131072(128K)。(对于服务器而言,增加这个参数的值对于发送数据很有帮助,在我的网络环境中,修改为了51200 131072 204800)

    tcp_rmem:mindefaultmax

    4096

    87380

    174760

    32768

    131072

    16777216

    接收缓存设置

    同tcp_wmem

    tcp_mem:mindefaultmax

    根据内存计算

    786432

    1048576 1572864

    low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。即低于此值没有内存压力。(理想情况下,这个值应与指定给 tcp_wmem 的第 2 个值相匹配 - 这第 2 个值表明,最大页面大小乘以最大并发请求数除以页大小 (131072 * 300 / 4096)。 )

    pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。(理想情况下这个值应该是 TCP 可以使用的总缓冲区大小的最大值 (204800 * 300 / 4096)。 )

    high:允许所有tcp sockets用于排队缓冲数据报的页面量。(如果超过这个值,TCP 连接将被拒绝,这就是为什么不要令其过于保守 (512000 * 300 / 4096) 的原因了。 在这种情况下,提供的价值很大,它能处理很多连接,是所预期的 2.5 倍;或者使现有连接能够传输 2.5 倍的数据。 我的网络里为192000 300000 732000)

    一般情况下这些值是在系统启动时根据系统内存数量计算得到的。

    tcp_app_win

    31

    31

    保留max(window/2^tcp_app_win, mss)数量的窗口由于应用缓冲。当为0时表示不需要缓冲。

    tcp_adv_win_scale

    2

    2

    计算缓冲开销bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale > 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale BOOLEAN>0)

    tcp_low_latency

    0

    0

    允许 TCP/IP 栈适应在高吞吐量情况下低延时的情况;这个选项一般情形是的禁用。(但在构建Beowulf 集群的时候,打开它很有帮助)

    tcp_westwood

    0

    0

    启用发送者端的拥塞控制算法,它可以维护对吞吐量的评估,并试图对带宽的整体利用情况进行优化;对于 WAN通信来说应该启用这个选项。

    tcp_bic

    0

    0

    为快速长距离网络启用 Binary Increase Congestion;这样可以更好地利用以 GB 速度进行操作的链接;对于WAN 通信应该启用这个选项。

    ip_forward

    0

    NAT必须开启IP转发支持,把该值写1

    ip_local_port_range:minmax

    32768

    61000

    1024

    65000

    表示用于向外连接的端口范围,默认比较小,这个范围同样会间接用于NAT表规模。

    ip_conntrack_max

    65535

    65535

    系统支持的最大ipv4连接数,默认65536(事实上这也是理论最大值),同时这个值和你的内存大小有关,如果内存128M,这个值最大8192,1G以上内存这个值都是默认65536

     

    所处目录/proc/sys/net/ipv4/netfilter/

    文件需要打开防火墙才会存在

    名称

    默认值

    建议值

    描述

    ip_conntrack_max

    65536

    65536

    系统支持的最大ipv4连接数,默认65536(事实上这也是理论最大值),同时这个值和你的内存大小有关,如果内存128M,这个值最大8192,1G以上内存这个值都是默认65536,这个值受/proc/sys/net/ipv4/ip_conntrack_max限制

     

    ip_conntrack_tcp_timeout_established

    432000

    180

    已建立的tcp连接的超时时间,默认432000,也就是5天。影响:这个值过大将导致一些可能已经不用的连接常驻于内存中,占用大量链接资源,从而可能导致NAT ip_conntrack: table full的问题。建议:对于NAT负载相对本机的 NAT表大小很紧张的时候,可能需要考虑缩小这个值,以尽早清除连接,保证有可用的连接资源;如果不紧张,不必修改

    ip_conntrack_tcp_timeout_time_wait

    120

    120

    time_wait状态超时时间,超过该时间就清除该连接

    ip_conntrack_tcp_timeout_close_wait

    60

    60

    close_wait状态超时时间,超过该时间就清除该连接

    ip_conntrack_tcp_timeout_fin_wait

    120

    120

    fin_wait状态超时时间,超过该时间就清除该连接

     

    文件所处目录/proc/sys/net/core/

    名称

    默认值

    建议值

    描述

    netdev_max_backlog

     

    1024

    16384

    每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目,对重负载服务器而言,该值需要调高一点。

    somaxconn 

     

    128

    16384

    用来限制监听(LISTEN)队列最大数据包的数量,超过这个数量就会导致链接超时或者触发重传机制。

    web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值。对繁忙的服务器,增加该值有助于网络性能

    wmem_default

     

    129024

    129024

    默认的发送窗口大小(以字节为单位)

    rmem_default

     

    129024

    129024

    默认的接收窗口大小(以字节为单位)

    rmem_max

     

    129024

    873200

    最大的TCP数据接收缓冲

    wmem_max

    129024

    873200

    最大的TCP数据发送缓冲

     

    2、两种修改内核参数方法:

    1、使用echo value方式直接追加到文件里如echo "1" >/proc/sys/net/ipv4/tcp_syn_retries,但这种方法设备重启后又会恢复为默认值

    2、把参数添加到/etc/sysctl.conf中,然后执行sysctl -p使参数生效,永久生效

     

    3、内核生产环境优化参数

    这儿所列参数是生产中常用的参数:

    net.ipv4.tcp_syn_retries = 1

    net.ipv4.tcp_synack_retries = 1

    net.ipv4.tcp_keepalive_time = 600

    net.ipv4.tcp_keepalive_probes = 3

    net.ipv4.tcp_keepalive_intvl =15

    net.ipv4.tcp_retries2 = 5

    net.ipv4.tcp_fin_timeout = 2

    net.ipv4.tcp_max_tw_buckets = 36000

    net.ipv4.tcp_tw_recycle = 1

    net.ipv4.tcp_tw_reuse = 1

    net.ipv4.tcp_max_orphans = 32768

    net.ipv4.tcp_syncookies = 1

    net.ipv4.tcp_max_syn_backlog = 16384

    net.ipv4.tcp_wmem = 8192 131072 16777216

    net.ipv4.tcp_rmem = 32768 131072 16777216

    net.ipv4.tcp_mem = 786432 1048576 1572864

    net.ipv4.ip_local_port_range = 1024 65000

    net.ipv4.ip_conntrack_max = 65536

    net.ipv4.netfilter.ip_conntrack_max=65536

    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180

    net.core.somaxconn = 16384

    net.core.netdev_max_backlog = 16384

    对比网上其他人的生产环境优化参数,需要优化的参数基本差不多,只是值有相应的变化。具体优化值要参考应用场景,这儿所列只是常用优化参数,是否适合,可在上面查看该参数描述,理解后,再根据自己生产环境而设。

    其它相关linux内核参数调整文章:

    Linux内核参数优化

    http://flandycheng.blog.51cto.com/855176/476769

    优化linux的内核参数来提高服务器并发处理能力

    http://www.ha97.com/4396.html

    nginx做web服务器linux内核参数优化

    http://blog.csdn.net/force_eagle/article/details/6725243


    展开全文
  • 由于Linux的内核参数信息都存在内存中,因此可以通过命令直接修改,并且修改后直接生效。但是,当系统重新启动后,原来设置的参数值就会丢失,而系统每次启动时都会自动去/etc/sysctl.conf文件中读取内核参数,因此...

    由于Linux的内核参数信息都存在内存中,因此可以通过命令直接修改,并且修改后直接生效。但是,当系统重新启动后,原来设置的参数值就会丢失,而系统每次启动时都会自动去/etc/sysctl.conf文件中读取内核参数,因此将内核的参数配置写入这个文件中,是一个比较好的选择。

    1. /proc/sys /proc/sys/kernel
    2. sysctl命令
    3. /etc/sysctl.conf文件,linux系统重启后内核参数值从该文件中读取

    Linux 操作系统修改内核参数有3种方式:
    1.直接修改 /proc/sys/ 目录中的文件,如: echo “379008 505344 758016” > /proc/sys/net/ipv4/tcp_mem
    2.使用sysctl命令临时修改,如:sysctl -w net.ipv4.tcp_mem=“379008 505344 758016”
    3.修改 /etc/sysctl.conf 文件,加入配置选项,格式为 key = value ,修改保存后调用 sysctl -p 加载新配置

    第三种方式在操作系统重启后会自动生效,第二和第三种方法重启后失效。

    sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下。sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发、IP碎片去除以及源路由检查等。用户只需要编辑/etc/sysctl.conf文件,即可手工或自动执行由sysctl控制的功能。
    -w 临时改变某个指定参数的值
    sysctl -w net.ipv4.ip_forward=1
    -a 显示所有的系统参数
    -p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载

    如果仅仅是想临时改变某个系统参数的值,可以用两种方法来实现,例如想启用IP路由转发功能:
    1) #echo 1 > /proc/sys/net/ipv4/ip_forward
    2) #sysctl -w net.ipv4.ip_forward=1
    以上两种方法都可能立即开启路由功能,但如果系统重启,或执行了
    # service network restart
    命令,所设置的值即会丢失,如果想永久保留配置,可以修改/etc/sysctl.conf文件
    将 net.ipv4.ip_forward=0改为net.ipv4.ip_forward=1

    展开全文
  • Linux内核参数修改方法

    千次阅读 2019-10-08 12:54:02
    由于Linux的内核参数信息都存在内存中,因此可以通过命令直接修改,并且修改后直接生效。但是,当系统重新启动后,原来设置的参数值就会丢失,而系统每次启动时都会自动去/etc/sysctl.conf文件中读取内核参数,因此...
  • 如何查看内核参数的说明文档

    千次阅读 2019-02-13 15:59:11
    如何查看内核参数的说明文档 原文链接 Linux内核源代码释出时会包含有一些关于内核参数(如sysctl.conf中的参数)和函数的说明文档,在CentOS/RedHat系统中,kernel-doc软件包里面打包的就是这些文档(也可以从官网...
  • Linux服务器内核参数优化

    万次阅读 2018-06-17 00:56:59
    所谓Linux服务器内核参数优化(适合Apache、Nginx、Squid等多种web应用,特殊的业务有可能需要做略微调整),主要是指在Linux系统中针对业务服务应用而进行的系统内核参数调整,优化并无一定的标准。下面是生产环境...
  • linux 调优 Linux内核参数详解

    千次阅读 2017-08-25 00:20:08
    sysctl.conf工作原理sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中。它包含一些TCP/IP堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能。...
  • 安装oracle时设置Linux系统内核参数

    千次阅读 2018-08-04 18:11:36
    安装oracle数据库时设置linux系统内核参数是比较重要的,关系到安装oracle是否成功。前几天面试时面试官提到主要内核参数那些及大页内存参数。 一: 下面是一些安装oracle数据库时需要在 vi /etc/sysctl.conf文件...
  • CentOS 7 内核参数优化

    千次阅读 2019-11-08 08:59:40
    打开内核参数文件 vi /etc/sysctl.conf 立即使配置文件生效 sysctl -p 一、防DDoS,CC和SYN攻击 1、开启SYN Cookies,当SYN等待队列溢出时,启用cookies来处理,可以防范少量的SYN攻击,默认为0,表示关闭 ...
  • centos对内核参数的修改

    千次阅读 2019-09-18 06:49:58
    在centos中 sysctl -a 显示当前系统中可用的内核参数Linux修改内核参数有三种方式:(1)修改 /etc/sysctl.conf 文件,加入配置选项,格式为 key = value ,修改保存后调用 sysctl -p 加载新配置(此种方式在系统...
  • Linux 系统内核参数调优

    千次阅读 2016-04-13 09:49:20
    通过调试系统内核参数使系统性能最大化如:最大并发数(ab –n 10000 –c 100 http://hosts:port/app/api)sysctl -a 查看所有系统变量...-p:从配置文件“/etc/sysctl.conf”加载内核参数设置; -a:打印当前所有可用
  • 摘要:Linux服务器内核参数优化高并发linux生产服务器内核参数优化案例说明:本优化适合apache,nginx,squid多种等web应用,特殊的业务也可能需要略作调整。所谓内核优化,主要是在Linux系统中针对业务服务应用而进行的...
  • linux内核参数修改生效

    千次阅读 2012-06-21 10:40:19
    linux内核参数: 在/etc/sysctl.conf中修改的系统内核参数 使内核参数生效 以下命令使系统参数生效。 # sysctl -p 执行如下命令使系统启动时读取配置的参数。 # chkconfig boot.sysctl on
  • Linux内核参数的优化

    千次阅读 2013-09-15 19:59:58
    默认的Linux的内核参数是比较通用的,可以根据业务的场景,进行优化 内核参数配置文件 /etc/sysctl.conf # 进程可以同时打卡的最大句柄数,限制最大并发连接数 fs.file-max = 999999 # 允许TIME_WAIT状态的socket...
  • Oracle中的sysctl.conf内核参数

    千次阅读 2018-06-29 14:27:20
    当我们对Oracle进行安装部署时,需要按照相关要求修改OS内核参数,下面对Oracle按照部署时需要修改的相关内核参数进行简单介绍。注:OS的内核参数大多数存放在/proc/sys目录下,可以在系统运行时进行更改,但是当系统...
  • OpenCL中设置内核参数整理

    千次阅读 2014-12-25 13:26:42
    这篇博文整理下OpenCL内核参数设置的问题。资源摘自OpenCL实战 首先,说一下kernel中的几种地址空间限定符: (1)__global 该参数的数据会保存在全局数据空间,在内核中的参数使用例子如下: __kernel void ...
  • Kubernetes Pod中的内核参数调整

    千次阅读 2020-03-05 19:27:01
    使用uwsgi部署了一个django的应用,并且使用Kubernetes来运行,但是运行以后老是报如下的错误,后来在网上查询了,是一个系统内核参数(net.core.somaxconn)太小了,默认是128.所以需要将它调整大一些。 uwsgi_proto_...
  • linux 内核参数调整说明

    千次阅读 2017-05-11 23:11:12
    linux 内核参数调整说明   所有的TCP/IP调优参数都位于/proc/sys/net/目录。例如, 下面是最重要的一些调优参数, 后面是它们的含义:   1. /proc/sys/net/core/rmem_max — 最大的TCP数据接收缓冲。   2. /...
  • Linux内核参数详解

    万次阅读 2015-07-30 09:23:20
    内核参数详解长期更新SYN_RECV服务端收到sys,还未发出syn+ack 1.net.ipv4.tcp_synack_retries 默认值5,linux对应1+2+4+..32=2^6-1=63s2.net.ipv4.tcp_syncookies 应该设置为1,防止SYN Flood。 处在SYN_RECV的...
  • Linux系统内核参数优化之TCP监听队列--somaxconn一、简述内核参数 `somaxconn`二、内核参数修改 `sysctl` 命令1.1 sysctl 命令简述1.1.1 查看前10条内核参数1.1.2 修改`dev.cdrom.autoclose` 变量(键)的值为`0`,...
  • UBOOT传递内核参数

    千次阅读 2012-04-03 22:53:48
    1.内核参数传递 内核中的参数是内核提供的,在配置内核时指定,而u-boot提供的则在u-boot启动时传递到内核取代内核提供的。u-boot的参数传递利用了三个通用寄存器R0,R1,R2。u-boot在启动的过程中把参数放到3个...
  • sysctl修改内核参数 重启不生效

    千次阅读 2018-01-09 16:24:45
    在尝试解决VM hung死问题时,需要修改内核参数 vm.dirty_ratio, 所以就遇到了在/etc/sysctl.conf中修改后,直接sysctl -p,参数修改OK: sysctl修改内核参数 重启不生效 > image2018-1-9 15:57:7.png" src=...
  • 内核参数优化

    千次阅读 2017-12-20 18:50:18
    fs.file-max = 999999:这个参数表示进程(比如一个worker进程)可以同时打开的最大句柄数,这个参数直线限制最大并发连接数,需根据实际情况配置。 net.ipv4.tcp_max_tw_buckets = 6000#这个参数表示操作系统允许...
  • Nginx做web服务器linux内核参数优化

    万次阅读 2011-08-27 20:05:07
    Nginx做web服务器linux内核参数优化 Nginx提供web服务时Linux内核参数调整是必不可少的,其中在优化方面就需要我们格外的注意。在下面就是对Linux内核参数优化的详细介绍,希望大家有所收获。 关于Linux内核参数的...
  • Linux 下 Oracle 内核参数优化

    万次阅读 2012-12-28 13:51:31
    本文主要描述基于Linux系统下 Oracle 内核参数的配置。 校验下面的列表中显示的内核参数的值被设置为大于或等于下面所显示的最小值。 如果你的系统中下面的任意参数的当前值已经大于或高于下面列出的值,请不要做...
  • oracle 内核参数设置

    千次阅读 2013-04-09 18:07:14
    共享内存的相关内核参数设置 Kernel.shmmax shmmax 指的是单个共享内存段的最大尺寸,单位为字节 oracle 建议,kernel.shmmax的值不能少于物理内存的一半,而且要大于Oracle中sga-max-size的值,否则会造成oracle...
  • Linux 操作系统修改内核参数有3种方式: 修改 /etc/sysctl.conf 文件,加入配置选项,格式为 key = value ,修改保存后调用 sysctl -p 加载新配置使用 sysctl 命令临时修改,如: sysctl -w ...
  • 问题在Kubernetes集群下运行的容器的内核参数是默认的,但是对于某型类型的应用如Nginx Ingress controller而言,默认的内核参数配置是不够的,需要做出调整,例如somaxconn是限制了接收新 TCP 连接侦听队列的大小,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 537,360
精华内容 214,944
关键字:

内核参数