`

(转)Linux TCP 系统参数配置

阅读更多
http://www.perfgeeks.com/?p=18

我们这里应用的是CentOS5.3,并内核使用的是2.6.18-128.el5PAE #1 SMP 。修改部分TCP ,有的是为了提高性能与负载,但是存在降低稳定性的风险。有的则是安全方面的配置,则有可能牺牲了性能。

1.TCP keepalive TCP连接保鲜设置

echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 15 > /proc/sys/net/ipv4/tcp_keepalive_intvl
echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes

keepalive是TCP保鲜定时器。当网络两端建立了TCP连接之后,闲置idle(双方没有任何数据流发送往来)了tcp_keepalive_time后,服务器内核就会尝试向客户端发送侦测包,来判断TCP连接状况(有可能客户端崩溃、强制关闭了应用、主机不可达等等)。如果没有收到对方的回答(ack包),则会在tcp_keepalive_intvl后再次尝试发送侦测包,直到收到对对方的ack,如果一直没有收到对方的ack,一共会尝试tcp_keepalive_probes次,每次的间隔时间在这里分别是15s, 30s, 45s, 60s, 75s。如果尝试tcp_keepalive_probes,依然没有收到对方的ack包,则会丢弃该TCP连接。

2. syn cookies设置

echo 0 > /proc/sys/net/ipv4/tcp_syncookies

在CentOS5.3中,该选项默认值是1,即启用syn cookies功能。我们建议先关闭,直到确定受到syn flood攻击的时候再开启syn cookies功能,有效地防止syn flood攻击。也可以通过iptables规则拒绝syn flood攻击。

3.TCP  连接建立设置

echo 8192 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 2 > /proc/sys/net/ipv4/tcp_syn_retries
echo 2 > /proc/sys/net/ipv4/tcp_synack_retries

tcp_max_syn_backlog  SYN队列的长度,时常称之为未建立连接队列。系统内核维护着这样的一个队列,用于容纳状态为SYN_RESC的TCP连接(half-open connection),即那些依然尚未得到客户端确认(ack)的TCP连接请求。加大该值,可以容纳更多的等待连接的网络连接数。
tcp_syn_retries  新建TCP连接请求,需要发送一个SYN包,该值决定内核需要尝试发送多少次syn连接请求才决定放弃建立连接。默认值是5. 对于高负责且通信良好的物理网络而言,调整为2
tcp_synack_retries  对于远端SYN连接请求,内核会发送SYN+ACK数据包来确认收到了上一个SYN连接请求包,然后等待远端的确认(ack数据包)。该值则指定了内核会向远端发送tcp_synack_retires次SYN+ACK数据包。默认设定值是5,可以调整为2

4. TCP 连接断开相关设置

echo 30 >  /proc/sys/net/ipv4/tcp_fin_timeout
echo 15000 > /proc/sys/net/ipv4/tcp_max_tw_buckets
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 1 >  /proc/sys/net/ipv4/tcp_tw_recycle

tcp_fin_timeout 对于由本端主动断开连接的TCP连接,本端会主动发送一个FIN数据报,在收到远端ACK后,且并没有收到远端FIN包之前,该TCP连接的状态是FIN_WAIT_2状态,此时当远端关闭了应用,网络不可达(拔网张),程序不可断僵死等等,本端会一直保留状态为FIN_WAIT_2状态的TCP连接,该值tcp_fin_timeout则指定了状态为FIN_WAIT_2的TCP连接保存多长时间,一个FIN_WAIT_2的TCP连接最多占1.5k内存。系统默认值是60秒,可以将此值调整为30秒,甚至10秒。
tcp_max_tw_buckets 系统同时处理TIME_WAIT sockets数目。如果一旦TIME_WAIT tcp连接数超过了这个数目,系统会强制清除并且显示警告消息。设立该限制,主要是防止那些简单的DoS攻击,加大该值有可能消耗更多的内存资源。如果TIME_WAIT socket过多,则有可能耗尽内存资源。默认值是18w,可以将此值设置为5000~30000
tcp_tw_resue 是否可以使用TIME_WAIT tcp连接用于建立新的tcp连接。
tcp_tw_recycle 是否开启快带回收TIME_WAIT tcp连接的功能。

5. tcp 内存资源使用相参数设定

echo 16777216 > /proc/sys/net/core/rmem_max
echo 16777216 > /proc/sys/net/core/wmem_max
cat /proc/sys/net/ipv4/tcp_mem
echo “4096 65536 16777216″ > /proc/sys/net/ipv4/tcp_rmem
echo “4096 87380 16777216″ > /proc/sys/net/ipv4/tcp_wmem

rmem_max 定义了接收窗口可以使用的最大值,可以根据BDP值进行调节。
wmem_max 定义了发送窗口可以使用的最大值,可以根据BDP什值进行调整。
tcp_mem [low, pressure, high] TCP用这三个值来跟踪内存使用情况,来限定资源占用。通常情况下,在系统boot之时,内核会根据可用内存总数计算出这些值。如果出现了Out of socket memory,则可以试着修改这个参数。
1)low: 当TCP使用了低于该值的内存页面数时,TCP不会考滤释放内存。
2)pressure: 当TCP使用了超过该值的内存页面数量,TCP试图稳定其对内存的占用,进入pressure模式,直到内存消耗达于low值,退出该模式。
3)hight:允许所有tcp sockets用于排队缓冲数据报的内存页数。
tcp_rmem [min, default, max]
1)min 为每个TCP连接(tcp socket)预留用于接收缓冲的内存数量,即使在内存出现紧张情况下TCP socket都至少会有这么多数量的内存用于接收缓冲。
2)default 为TCP socket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的 rmem_default的值,所以有可能被rmem_default覆盖。
3)max 该值为每个tcp连接(tcp socket)用于接收缓冲的内存最大值。该值不会影响wmem_max的值,设置了选项参数 SO_SNDBUF则不受该值影响。
tcp_wmem [min, default, max] 如上(tcp_rmen)只不过用于发送缓存。

注:
1)可以通过sysctl -w 或者写入/etc/sysctl.conf永久保存
2)性能调优仅在于需要的时候进行调整,调整以后需要采集数据与基准测试数据进行比较。建议,不需要盲从地调整这些参数。

分享到:
评论

相关推荐

    通过调整Linux TCP参数提示服务器性能

    Linux 作为一个开源操作系统,具有高度的可配置性和可扩展性,在服务器性能优化中扮演着重要角色。 TCP(Transmission Control Protocol)是 Linux 中的一个核心协议,负责管理网络连接和数据传输。然而,TCP 的缺省...

    linux 下tcp参数优化

    Linux 下 TCP 参数优化 Linux 操作系统的网络性能优化是提高服务器性能的关键所在。其中,TCP 参数的优化对网络性能的影响非常大。本文将详细介绍 Linux 下 TCP 参数的优化,包括 CLOSE_WAIT 状态的生成原因、proc/...

    Linux 内核网络参数配置资料

    **TCP参数配置** - **`net.ipv4.tcp_fin_timeout`**: 设置TCP连接关闭后等待释放的时间。 - **应用场景**:对于长时间未使用的连接,及时释放可以释放系统资源,提高资源利用率。 - **`...

    linux串口数据转TCP

    标题“Linux串口数据转TCP”指的是一种技术,它允许通过Linux系统的串行接口(如UART)收发的数据转换为TCP/IP协议进行传输。这通常涉及到一个中间软件层,称为“串口到TCP网关”,它可以将串口数据流实时转发到TCP...

    Linux_Tcp.rar_LINUX TCP _linux TCP_tcp linux

    至于"Linux Tcp",Linux系统提供了丰富的内核参数和工具来调整TCP的行为,以优化网络性能。例如,通过sysctl命令可以修改net.core.somaxconn、net.ipv4.tcp_max_syn_backlog等参数,控制最大连接数和SYN队列长度,...

    如何测试Linux下tcp最大连接数限制详解

    前言 关于TCP服务器最大并发连接数有一种误解就是“因为端口号上限为65535,所以TCP服务器理论上的可承载的最大并发连接数也是...这个测试主要是想搞明白Linux下哪些参数配置限制了连接数的最大值,上限是多少。 一、先

    linux tcp服务器压力测试

    此外,还可以通过调整TCP参数,如`tcp_congestion_control`、`net.ipv4.tcp_no_metrics_save`、`net.ipv4.tcp_tw_reuse`等,优化服务器性能。 测试过程中,可能会遇到的问题包括:服务器响应延迟增大、连接超时、丢...

    linux tcpmodbus客户端

    0x03功能码用于读取多个保持寄存器的值,0x06用于单个寄存器的写操作,而0x10功能码则支持批量写入多个保持寄存器,这对于配置或控制设备参数非常有用。 在`tcpmodbusclient.c`源代码文件中,可能包含了实现这些...

    追踪linux TCP/IP 代码运行_光盘文件1

    8. **内核模块编译与调试**:如果需要修改TCP/IP协议栈的代码,需要了解如何编译内核模块,以及如何配置内核参数来启用或调整相关功能。 通过以上这些知识的学习和实践,开发者可以更好地理解Linux系统中TCP/IP协议...

    linux TCP服务器连接时发不出数据

    通过对Linux TCP服务器在连接时发不出数据的问题进行详细分析,我们发现主要问题在于服务器端的线程同步机制不完善以及TCP/IP协议栈的配置不当。通过加强线程间的同步控制、优化TCP/IP协议栈配置以及改进数据包的...

    在Linux下配置TCP-IP.rar_IPX_LINUX TCP _Linux tcp ip d_TCP IP_linux t

    在Linux操作系统中,配置TCP/IP和IPX协议是网络连接的基础步骤,对于系统管理员和IT专业人士来说至关重要。本文将深入探讨这两个协议的配置过程,并提供相关的详细步骤。 首先,我们来了解一下TCP/IP协议。TCP...

    Linux系统的参数配置优化技巧

    在Linux系统中,优化参数配置对于提升系统性能、增强安全性以及解决特定问题至关重要。本文将详细探讨上述提到的一些关键参数的调整及其作用。 1. **TCP滑动窗口大小**:滑动窗口是TCP协议中的一个概念,用于控制...

    Linux系统中网络配置详解

    - 通过这种方式,LILO会在启动过程中传递这些参数给Linux内核,从而使得Linux系统能够更好地识别和使用网络设备。 #### (二)网络接口的配置 1. **基本网络接口配置**: - 使用`ifconfig`命令来配置网络接口的...

    linux c tcp server

    在Linux操作系统中,TCP(传输控制协议)服务器是一种常见的网络应用程序,它允许远程客户端通过TCP连接与服务器进行通信。本文将深入探讨如何在Linux环境下使用C语言实现一个简单的TCP服务器,涉及的知识点包括TCP/...

    Linux服务器系统性能参数配置不当引起的网站访问报错ERR-CONNECTION-TIMED-OUT 200解决方法

    ### Linux服务器系统性能参数配置不当引起的问题及解决方案 #### 一、问题背景 在NAT(Network Address Translation)网络环境下,Linux服务器系统性能参数的不当配置可能会导致网站访问出现“ERR_CONNECTION_...

    linux查看系统信息命令大全

    在Linux操作系统中,掌握一些常用的系统信息查看命令是每个IT从业者必备的基础技能。这些命令能够帮助我们了解系统的硬件状态、软件配置、运行状态以及资源使用情况。以下是一些主要的Linux系统信息查看命令: 1. *...

    在Linux下禁用IPv6的方法小结

    在Linux系统中禁用IPv6是网络管理员和系统管理员常用的技术手段之一,特别是在当前IPv4地址尚未完全耗尽而IPv6尚未被全面采纳的过渡时期。IPv6的启用确实为解决IPv4地址空间耗尽问题提供了可能,但是在IPv6和IPv4...

Global site tag (gtag.js) - Google Analytics