原文:http://www.zhaoxiaodan.com/lnmp/%E6%89%93%E5%BC%80linux-tcp%E7%AB%AF%E5%8F%A3%E5%BF%AB%E9%80%9F%E5%9B%9E%E6%94%B6.html

-------------------------------------------------------------------------------------------------------

打开linux-tcp端口快速回收

事件:

之前看到一些文章说关于流量升高导致TIME_WAIT增加,MySQL连接大量失败的问题, 当时并不是很理解究竟怎么回事

今天在对阿里云服务器上的tengine 做 1000个并发的webbench 测试时,ssh 会被踢掉,

怀疑网络链接的问题 ,用netstat 查看 ,看到有很多很多 TIME_WAIT 状态的 tcp 链接:

…
tcp 0 0 42.121.16.232:www 42.121.16.220:44091 TIME_WAIT
tcp 0 0 42.121.16.232:www 42.121.16.220:42309 TIME_WAIT
tcp 0 0 42.121.16.232:www 42.121.16.220:43896 TIME_WAIT
tcp 0 0 42.121.16.232:www 42.121.16.220:44150 TIME_WAIT
tcp 0 0 localhost:9000 localhost:34634 TIME_WAIT
tcp 0 0 42.121.16.232:www 42.121.16.220:44493 TIME_WAIT
tcp 0 0 localhost:9000 localhost:35354 TIME_WAIT
tcp 0 0 42.121.16.232:www 42.121.16.220:42770 TIME_WAIT
tcp 0 0 localhost:9000 localhost:34995 TIME_WAIT
tcp 0 0 localhost:9000 localhost:35038 TIME_WAIT
tcp 0 0 localhost:9000 localhost:34108 TIME_WAIT
tcp 0 0 42.121.16.232:www 42.121.16.220:41764 TIME_WAIT
tcp 0 0 42.121.16.232:www 42.121.16.220:42337 TIME_WAIT
tcp 0 0 42.121.16.232:www 42.121.16.220:44179 TIME_WAIT
…

nginx将php解析通过TCP转发给php-fpm,需要占用一个TCP,php-fpm中的mysql连接, 又需要占用一个TCP

(但是检查发现, 其实没有 php-fpm -> mysql 的链接, 因为mysql使用的不是TCP而是UNIX SOCKET, 具体看 这里 )

再看:

~# netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
SYN_RECV 186
TIME_WAIT 30245
ESTABLISHED 211
FIN_WAIT1 333

TIME_WAIT 居然有3W多个 ,随着时间推移还会极速增加中

怪不得了, 端口也就65536个, 用完了自然就没了!!

而且,

解决办法:打开LINUX TCP 端口快速回收

修改 /etc/sysctl.conf, 添加两条数据

#打开重用
net.ipv4.tcp_tw_reuse = 1
#打开快速回收
net.ipv4.tcp_tw_recycle = 1

保存后执行 sysctl -p 生效

注:

如果nginx,php-fpm,mysql都在同一台机器, 推荐php-fpm和mysql都使用UNIX SOKCET. 方法看 这里

TIME_WAIT产生原因:

1、nginx现有的负载均衡模块实现php fastcgi负载均衡,nginx使用了短连接方式,所以会造成大量处于TIME_WAIT状态的连接。

2、TCP/IP设计者本来是这么设计的, 主要有两个原因

(1) 防止上一次连接中的包,迷路后重新出现,影响新连接(经过2MSL,上一次连接中所有的重复包都会消失)

(2) 可靠的关闭TCP连接, 在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。

为什么短连接TCP在高并发大流量会扛不住?

一般LNMP服务器架构, 都是nginx接受http请求, 然后将php文件的解析转发给php-fpm, 这个过程nginx需要使用新的TCP端口与php-fpm的9000端口去建立TCP链接, 那么, 一个php请求就需要一个新的端口

若2MSL时间为1分钟以上,同时,不同用户http两次请求间隔很短。那么反代的端口,5秒用1W个,10秒2W,15秒3W,20秒4W,25秒5W,30秒6W!!!而linux最大端口就是65535个, 前面已经用掉的端口还没被回收掉。那么将会有很多的用户请求被nginx接收之后,因没有端口资源而无法与php-fpm创建tcp连接… 所以服务器会’挂掉’

【转】打开linux-tcp端口快速回收的更多相关文章

  1. Linux 根据端口快速停止服务并启动的办法

    0. 需要使用 lsof 的命令, 如果linux 上面没有安装的话 需要自行安装 yum install lsof or apt-get install lsof 1. 先根据端口查进程号 [roo ...

  2. linux socket中tcp的time_wait的快速回收和重用

    解决方法: 我们可以通过调整内核参数来调整: vi /etc/sysctl.conf 编辑文件,加入以下内容: net.ipv4.tcp_syncookies = net.ipv4.tcp_tw_re ...

  3. 解决MySQL建立连接问题,快速回收复用TCP的TIME_WAIT

    最近同事遇到一个问题,使用python开发的工具在执行的时候无法和MySQL建立连接,其最直接的现象就是满篇的TIME_WAIT,最后通过调整tcp_timestamps参数问题得以解决,再次记录一下 ...

  4. TCP的TIME_WAIT快速回收与重用

    声明一点: Linux中是无法修改tcp的TIME_WAIT值的,除非重新编译,起码我是没有找到怎么改.值得注意的是,net.ipv4.tcp_fin_timeout这个参数是FIN_WAIT_2的值 ...

  5. linux上大量tcp端口处于TIME_WAIT的问题

    今天发现网站突然无法访问,登陆webserver已经无法连接mysql,转战mysql一看,发现竟然有三千多个TIME_WAIT连接,擦,被SYN攻击了?百度&&google,发现通过 ...

  6. [LINUX] 快速回收连接

    i /etc/sysctl.conf 编辑文件,加入以下内容:net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_r ...

  7. Linux TCP/IP调优-Linux内核参数注释

    固定文件的内核参数 下列文件所在目录: /proc/sys/net/ipv4/ 名称 默认值 建议值 描述 tcpsyn_retries 5 1 对于一个新建连接,内核要发送多少个SYN连接请求才决定 ...

  8. LINUX TCP套接字详细配置

    提高服务器的负载能力,是一个永恒的话题.在一台服务器CPU和内存资源额定有限的情况下,最大的压榨服务器的性能,是最终的目的.要提高 Linux系统下的负载能力,可以先启用Apache的Worker模式 ...

  9. Linux TCP协议使用的变量

    Linux /proc/sys/net/ipv4/* 变量 TCP变量:somaxconn - INTEGER    listen()的backlog参数的上限,在用户态为SOMAXCONN.默认是1 ...

随机推荐

  1. elementUI 学习入门之 container 布局容器

    Container 布局容器 用于布局的容器组件,方便快速搭建页面基本结构 <el-container> : 外层容器.当子元素包含 <el-header> 或 <el- ...

  2. ref:Java安全之反序列化漏洞分析(简单-朴实)

    ref:https://mp.weixin.qq.com/s?__biz=MzIzMzgxOTQ5NA==&mid=2247484200&idx=1&sn=8f3201f44e ...

  3. HDU 4085 Peach Blossom Spring

    斯坦纳树. 最后可以是森林,在计算出每个联通状态的最小费用后,还需要进行一次$dp$. #include<bits/stdc++.h> using namespace std; const ...

  4. 洛谷P3857 [TJOI2008]彩灯 [线性基]

    题目传送门 彩灯 题目描述 Peter女朋友的生日快到了,他亲自设计了一组彩灯,想给女朋友一个惊喜.已知一组彩灯是由一排N个独立的灯泡构成的,并且有M个开关控制它们.从数学的角度看,这一排彩灯的任何一 ...

  5. 磁盘镜像分析工具Autopsy

    磁盘镜像分析工具Autopsy   Autopsy是Kali Linux预安装的一款磁盘镜像分析工具.该工具可以对磁盘镜像的卷和文件系统进行分析,支持Unix和Windows系统.Autopsy是一个 ...

  6. 【BZOJ 4455】 4455: [Zjoi2016]小星星 (容斥原理+树形DP)

    4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 426  Solved: 255 Description 小Y是 ...

  7. 「SCOI2016」萌萌哒

    「SCOI2016」萌萌哒 题目描述 一个长度为 \(n\) 的大数,用 \(S_1S_2S_3 \ldots S_n\) 表示,其中 \(S_i\) 表示数的第 \(i\) 位,\(S_1\) 是数 ...

  8. Educational Codeforces Round 43 (Rated for Div. 2) ABCDE

    A. Minimum Binary Number time limit per test 1 second memory limit per test 256 megabytes input stan ...

  9. bzoj 3289 莫队 逆序对

    莫队维护逆序对,区间左右增减要分类讨论. 记得离散化. /************************************************************** Problem: ...

  10. AC自动机详解(附加可持久化AC自动机)

    AC自动机 AC自动机,说白了就是在trie树上跑kmp(其实个人感觉比kmp容易理解).是一种多匹配串,单个主串的匹配.概括来说,就是将多个匹配串构造一个trie树,对于每个trie树的节点构造nx ...