`

linux 系统优化tcp连接

 
阅读更多

最近几天 系统不太稳定, tcp/ip 连接超级多,估计应用服务器到极限了

网上看到了一片好文,随抄在这里了,感谢原作者

原文连接: http://blog.renhao.org/2010/07/setup-linux-kernel-tcp-settings/#more-162

提高服务器的负载能力,是一个永恒的话题。在一台服务器CPU和内存资源额定有限的情况下,最大的压榨服务器的性能,是最终的目的。要提高Linux系统下的负载能力,可以先启用Apache的Worker模式(参考我写的《Ubuntu下配置Apache的Worker模式》一文),来提高单位时间内的并发量。但是即使这么做了,当网站发展起来之后,连接数过多的问题就会日益明显。在节省成本的情况下,可以考虑修改Linux的内核TCP/IP参数,来最大的压榨服务器的性能。当然,如果通过修改内核参数也无法解决的负载问题,也只能考虑升级服务器了,这是硬件所限,没有办法的事。

Linux系统下,TCP/IP连接断开后,会以TIME_WAIT状态保留一定的时间,然后才会释放端口。当并发请求过多的时候,就会产生大量的TIME_WAIT状态的连接,无法及时断开的话,会占用大量的端口资源和服务器资源(因为关闭后进程才会退出)。这个时候我们可以考虑优化TCP/IP的内核参数,来及时将TIME_WAIT状态的端口清理掉。

本文介绍的方法只对拥有大量TIME_WAIT状态的连接导致系统资源消耗有效,不是这个原因的情况下,效果可能不明显。那么,到哪儿去查TIME_WAIT状态的连接呢?那就是使用netstat命令。我们可以输入一个复核命令,去查看当前TCP/IP连接的状态和对应的个数:

#netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

这个命令会显示出类似下面的结果:

LAST_ACK 14
SYN_RECV 348
ESTABLISHED 70
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18122

我们只用关心TIME_WAIT的个数,在这里可以看到,有18000多个TIME_WAIT,这样就占用了18000多个端口。要知道端口的数量只有65535个,占用一个少一个,会严重的影响到后继的新连接。这种情况下,我们就有必要调整下Linux的TCP/IP内核参数,让系统更快的释放TIME_WAIT连接。

我们用vim打开配置文件:

#vim /etc/sysctl.conf

然后,在这个文件中,加入下面的几行内容:

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

最后输入下面的命令,让内核参数生效:

#/sbin/sysctl -p

简单的说明下,上面的参数的含义:

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;
net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间。

在经过这样的调整之后,除了会进一步提升服务器的负载能力之外,还能够防御一定程度的DDoS、CC和SYN攻击,是个一举两得的做法。

此外,如果你的连接数本身就很多,我们可以再优化一下TCP/IP的可使用端口范围,进一步提升服务器的并发能力。依然是往上面的参数文件中,加入下面这些配置:

net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000

这几个参数,建议只在流量非常大的服务器上开启,会有显著的效果。一般的流量小的服务器上,没有必要去设置这几个参数。这几个参数的含义如下:

net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 10000 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为10000到65000。(注意:这里不要将最低值设的太低,否则可能会占用掉正常的端口!
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。默 认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于 Squid,效果却不大。此项参数可以控制TIME_WAIT的最大数量,避免Squid服务器被大量的TIME_WAIT拖死。

经过这样的配置之后,你的服务器的TCP/IP并发能力又会上一个新台阶。

分享到:
评论

相关推荐

    服务器安全狗Linux版

    文件监控、进程监控、CPU监控、内存监控、磁盘容量监控、文件自动备份、TCP连接监控、网络流量统计等功能把您从24小时在线状态中解放出来。 4、系统快速优化 对系统内存、网络等一些关键参数,提供了快速优化的...

    基于Linux的Socket网络编程的性能优化

    介绍在Linux 操作系统环境下Socket 网络编程的原理、流程和最终实现。编程采用客户端/服务器模式。提出解决多个客户端连接服务器时无法处理I/O 多路复用问题的方法。提出通过最小化报文传输来减少传输时延,为...

    Linux高性能服务器编程

    3.2.3 使用tcpdump观察TCP头部信息 3.3 TCP连接的建立和关闭 3.3.1 使用tcpdump观察TCP连接的建立和关闭 3.3.2 半关闭状态 3.3.3 连接超时 3.4 TCP状态转移 3.4.1 TCP状态转移总图 3.4.2 TIME_WAIT状态 3.5...

    【荐】mysql服务性能优化—my.cnf_my.ini配置说明详解(16G内存)

    如果系统在短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的监听队列的大小。默认值50。 max_connections = 3000 #MySQL允许最大的进程连接数,如果经常出现Too Many Connections的错误...

    Linux常见面试题,应对面试分享

    **Linux 系统安全优化与内核优化** **经常使用shell脚本做什么** **软连接与硬链接的区别** **怎么查看文件** **IOS七层模型** **三次握手与四次挥手** **lvm 逻辑卷创建过程** **磁盘配额** **raid 磁盘...

    RED HAT LINUX 6大全

    本书全面系统地介绍了Red Hat Linux 6。全书共分为五个部分,包括35章和四个附录。第一部分为Red Hat Linux的介绍和安装;第二部分为服务配置;第三部分为系统管理;第四部分为Linux编程;第五部分为附录。本书内容...

    Linux下基于TCP的预先派生子进程服务器的Socket编程

    描述了客户/服务器模型以及常见...实验结果表明:在与并发客户的TCP交互中,与并发服务器相比,预先派生子进程服务器能够及时处理新的客户连接,且响应时间减小到并发服务器的三分之一,达到了对服务器性能优化的目的。

    Linux mysql-5.7.12

    8.提供TCP/IP、ODBC和JDBC等多种数据库连接途径。 9.提供用于管理、检查、优化数据库操作的管理工具。 10.支持大型的数据库。可以处理拥有上千万条记录的大型数据库。 11.支持多种存储引擎。

    redhat linux教材20课程学习文档

    第二章 Linux系统基本原理 2.1 Linux的体系结构以图来表现 2.2 基本特点 2.2.1 单核心 2.2.2 多用户的操作系统 2.2.3 分时机制 2.2.4 多任务运行 2.3 核心与模块(模块分类、进程,核心结构图) 2.4 文件系统的基本...

    源自新浪的TCP性能分析工具Tcpdive.zip

    而当我们尝试优化TCP协议时,却面临着不少难点: 可用的工具少。  和TCP相关的工具,比如tcpdump,netstat和ss,虽然很好用,但是使用场景并不是TCP协议的性能评测,  能够提供的性能信息实在有限。 ...

    Weblogic Portal应用环境调优

    五、 调整TCP接受预备连接数 4 六、 修改日志记录规则 4 七、 打开Novell认证器层次结构缓存 5 八、 关闭诊断文件 5 九、 修改是JVM在Linux下的bug(可以解决任何一个域Weblogic启动慢的问题) 7 十、 Linux系统修改...

    Linux服务器常用命令(简化版).docx

    -printcertreq 打印证书请求的内容 14 -printcrl 打印CRL文件的内容 15 -storepasswd 更改密钥库的存储口令 2.rndc-confgen命令 为rndc生成配置文件,rndc命令通过TCP连接与DNS服务器通信,发送使用数字签名认证的...

    golang基于websocket单台机器支持百万连接分布式聊天(IM)系统.zip

    操作系统 (OS):如Windows、macOS、Linux、Unix等,是管理和控制计算机硬件与软件资源、提供公共服务、协调计算机各部分工作的基础平台,是用户与计算机硬件之间的桥梁。 驱动程序:为特定硬件设备提供接口,使...

    你知道一台Linux服务器可以负载多少个连接吗

    首先我们来看如何标识一个TCP连接?系统是通过一个四元组来识别,(src_ip,src_port,dst_ip,dst_port)即源IP、源端口、目标IP、目标端口。比如我们有一台服务192.168.0.1,开启端口80.那么所有的客户端都会连接到这台...

    基于 C/S 架构的聊天室设计与实现(C++)

    本程序为基于 C/S 的网络聊天室系统,使用 Linux 网络编程作为服务器,使用 QT 编程作为客户端。 客户端通过输入 IP 地址、端口号、Email、聊天名称、聊天组号连接到服务器, 用户通过客户端发送消息,同时接收来自...

    linux中高并发socket最大连接数的优化详解

    首先我们可以通过ulimit –a命令来查看系统的一些资源限制情况,如下: # ulimit -a core file size (blocks, -c) 1024 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) ...

    学习系统-在线考试系统 .zip

    操作系统 (OS):如Windows、macOS、Linux、Unix等,是管理和控制计算机硬件与软件资源、提供公共服务、协调计算机各部分工作的基础平台,是用户与计算机硬件之间的桥梁。 驱动程序:为特定硬件设备提供接口,使...

    sdr-server:用于rtl-sdr的高性能TCP服务器

    输出保存到磁盘或通过TCP套接字流回 可以压缩输出(默认情况下为true) 输出将被抽取到所请求的带宽 客户可以要求重叠的射频频谱 Rtl-sdr仅在第一个客户端连接(即节省太阳能等)之后启动。 仅在最后一个客户端断开...

    SSM框架构建积分系统和基本商品检索系统.zip

    操作系统 (OS):如Windows、macOS、Linux、Unix等,是管理和控制计算机硬件与软件资源、提供公共服务、协调计算机各部分工作的基础平台,是用户与计算机硬件之间的桥梁。 驱动程序:为特定硬件设备提供接口,使...

Global site tag (gtag.js) - Google Analytics