【转】打开linux-tcp端口快速回收
-------------------------------------------------------------------------------------------------------
打开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端口快速回收的更多相关文章
- Linux 根据端口快速停止服务并启动的办法
0. 需要使用 lsof 的命令, 如果linux 上面没有安装的话 需要自行安装 yum install lsof or apt-get install lsof 1. 先根据端口查进程号 [roo ...
- linux socket中tcp的time_wait的快速回收和重用
解决方法: 我们可以通过调整内核参数来调整: vi /etc/sysctl.conf 编辑文件,加入以下内容: net.ipv4.tcp_syncookies = net.ipv4.tcp_tw_re ...
- 解决MySQL建立连接问题,快速回收复用TCP的TIME_WAIT
最近同事遇到一个问题,使用python开发的工具在执行的时候无法和MySQL建立连接,其最直接的现象就是满篇的TIME_WAIT,最后通过调整tcp_timestamps参数问题得以解决,再次记录一下 ...
- TCP的TIME_WAIT快速回收与重用
声明一点: Linux中是无法修改tcp的TIME_WAIT值的,除非重新编译,起码我是没有找到怎么改.值得注意的是,net.ipv4.tcp_fin_timeout这个参数是FIN_WAIT_2的值 ...
- linux上大量tcp端口处于TIME_WAIT的问题
今天发现网站突然无法访问,登陆webserver已经无法连接mysql,转战mysql一看,发现竟然有三千多个TIME_WAIT连接,擦,被SYN攻击了?百度&&google,发现通过 ...
- [LINUX] 快速回收连接
i /etc/sysctl.conf 编辑文件,加入以下内容:net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_r ...
- Linux TCP/IP调优-Linux内核参数注释
固定文件的内核参数 下列文件所在目录: /proc/sys/net/ipv4/ 名称 默认值 建议值 描述 tcpsyn_retries 5 1 对于一个新建连接,内核要发送多少个SYN连接请求才决定 ...
- LINUX TCP套接字详细配置
提高服务器的负载能力,是一个永恒的话题.在一台服务器CPU和内存资源额定有限的情况下,最大的压榨服务器的性能,是最终的目的.要提高 Linux系统下的负载能力,可以先启用Apache的Worker模式 ...
- Linux TCP协议使用的变量
Linux /proc/sys/net/ipv4/* 变量 TCP变量:somaxconn - INTEGER listen()的backlog参数的上限,在用户态为SOMAXCONN.默认是1 ...
随机推荐
- 为什么主引导记录的内存地址是0x7C00?
转自:http://www.ruanyifeng.com/blog/2015/09/0x7c00.html 当时,搭配的操作系统是86-DOS.这个操作系统需要的内存最少是32KB.我们知道,内存地址 ...
- perl相关知识
转:http://www.runoob.com/perl/perl-cgi-programming.html Perl 是 Practical Extraction and Report Langua ...
- 洛谷P3292 [SCOI2016] 幸运数字 [线性基,倍增]
题目传送门 幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的 ...
- Python类总结-封装(私有属性,方法)
封装基础 广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装 只让自己的对象能调用自己类中的方法 狭义上的封装-面向对象三大特性之一(私有变量,用公有的方法封装私有属性,方法叫封装) 把 ...
- 深入理解javascript函数系列第三篇
前面的话 函数是javascript中特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本文是深入理解javascript函数 ...
- Python协程(上)
几个概念: event_loop 事件循环:程序开启一个无限的循环,程序员会把一些函数注册到事件循环上.当满足事件发生的时候,调用相应的协程函数. coroutine 协程:协程对象,指一个使用asy ...
- openssl-0.9.8k_WIN32(RSA密钥生成工具
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha openssl-0.9.8k_WIN32(RSA密钥生成工具
- 范浩强treap 普通平衡树
增加Split(分裂),Merge(合并)操作,非常好写,时间也不比普通treap慢什么. #include<bits/stdc++.h> using namespace std; str ...
- 【插头DP】BZOJ1814-Formula
[题目大意] 给出一个m*n的矩阵里面有一些格子为障碍物,求经过所有非障碍格子的哈密顿回路个数. [思路] 最典型的插头DP.分为三种情况: (1)当前格子既没有上插头也没有左插头. 如果下边和右边都 ...
- python3-开发进阶Flask的基础(2)
知识回顾 1.django 和flask区别? 最大的不同就是django请求相关的数据,通过参数一个一个传递过去的,而flask就是先把放在某个地方,然后去取,这个东西叫上下文管理 2.什么是wsg ...