• Linux系统的几个重要内核参数


     

    以下是在/etc/sysctl.conf文件中配置的几个重要内核参数,这几个参数的设置关系到系统性能:

    net.ipv4.tcp_syncookies
    #此参数应该设置为1,防止SYN Flood。
    处在SYN_RECV的TCP连接称为半连接,存储在SYN队列。大量SYN_RECV会导致队列溢出,后续请求将被内核直接丢弃,也就是SYN Flood攻击。开启syncookies后,当SYN队列满了后,TCP会通过原地址端口,目的地址端口和时间戳打造一个特别的Sequence Number(又叫cookie发回去,如果是攻击者则不会有响应,如果是正常连接则把这个SYNCookie发回来,然后服务器端可以通过cookie建立连接(即使不在SYN队列)。

    net.ipv4.tcp_fin_timeout
    #此参数默认值60,TCP保持在FIN_WAIT2状态的时间,超时后直接处于CLOSED,所以降低tcp_fin_timeout有助于减少TIME_WAIT数量。注意:虽然shutdown(SHUD_WR)也会处于FIN_WAIT2状态,但超时并不起作用。

    net.ipv4.tcp_tw_recycle
    #此参数默认值0,打开快速TIME_WAIT socket回收。
    如果tcp_timestamps开启的话,会缓存每个连接的最新时间戳,如果后续请求时间戳小于缓存的时间戳,即视为无效,相应的包被丢弃。所以如果是在NAT(Network Address Translation)网络下,就可能出现数据包丢弃的现象,会导致大量的TCP连接建立错误。

    net.ipv4.tcp_tw_resue
    #此参数默认值0,是否重用TIME_WAIT状态的socket用于新的连接。
    这个选项要比net.ipv4.tcp_tw_recycle安全,从协议的角度看,复用是安全的。复用条件:
    1)net.ipv4.tcp_timestamps选项必须打开(客户端也必须打开) ;
    2)  重用TIME_WAIT的条件是收到最后一个包后超过1秒;

    net.ipv4.tcp_keepalive_time = 1200
    #此参数表示TCP发送keepalive探测消息的间隔时间(秒), 用于确认TCP连接是否有效。当keepalive起用时,TCP发送keepalive消息的频度。缺省是2小时,可改为20分钟。

    ################################################################
    ######           Linux服务器产生大量CLOSE-WAIT的原因和处理方法             #####
    ################################################################

    close_wait状态出现的原因是被动关闭方未关闭socket造成
    当客户端因为某种原因先于服务端发出了FIN信号,就会导致服务端被动关闭,若服务端不主动关闭socket发FIN给Client,此时服务端Socket会处于CLOSE_WAIT状态(而不是LAST_ACK状态)。通常来说,一个CLOSE_WAIT会维持至少2个小时的时间(系统默认超时时间的是7200秒,也就是2小时)。如果服务端程序因某个原因导致系统造成一堆CLOSE_WAIT消耗资源,那么通常是等不到释放那一刻,系统就已崩溃。

    这里需要首先了解下tcp keepalive的三个参数:
    默认tcp_keepalive_time      的值为7200 ,超时时间(开启keepalive的闲置时长);
    默认tcp_keepalive_intvl      的值为75 ,tcp检查间隔时间(keepalive探测包的发送间隔);
    默认tcp_keepalive_probes  的值为9 ,tcp检查次数(如果对方不予应答,探测包的发送次数);

    要根据自身的业务来调整这三个参数,有下面三种方式:

    第一种方式:
    # vim /etc/sysctl.conf
    net.ipv4.tcp_keepalive_time = 1800
    net.ipv4.tcp_keepalive_probes = 3
    net.ipv4.tcp_keepalive_intvl = 15
    # sysctl -p
    
    第二种方式:
    # echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time
    # echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl
    # echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes
    
    第三种方式:
    # sysctl -w net.ipv4.tcp_keepalive_time=600   
    # sysctl -w net.ipv4.tcp_keepalive_probes=2 
    # sysctl -w net.ipv4.tcp_keepalive_intvl=2
  • 相关阅读:
    关于wince 版本的支持——用_WIN32_WCE来做判断?
    【转载】關於 ROMonly Files System——这个对掉电保存非常有用
    【资讯】wince 更新地址改变了,这里贴一个新的,大伙好找。
    【讨论】如何降低nandflash读写速度?
    一个低级的S3c2416 wince SD eboot汇编错误
    【转载】SQL CE 3.0 与SQL CE 3.5区别
    【资讯】关于wince 7 授权费以及开发工具软件费一览表,啥时候我也试试。
    报告一下我最近做的事情
    wince 三年之后,忍痛分析微软在移动互联网上不能做大的原因
    奶奶的熊,就是因为一跳串口线,导致一个客户重新做了一次S5pv210 底板,烧写wince6.0 两周不成功,哎,实在没办法,叫他发电路板给我调试,我发现居然是串口线!
  • 原文地址:https://www.cnblogs.com/kevingrace/p/6656095.html
Copyright © 2020-2023  润新知