www.yzc577.com为何redis的TIME_WAIT值云云之高

( www.yzc577.com )

我用的是redis的pecl客户端,在代码里运用的是connect函数,并且每次央求都手动封闭了衔接。但近来iammutex的一个答复提示了我存眷下零碎的衔接数,于是我在早晨拜访量比较小的时分看到如下让我吃惊的后果

netstat -na | grep 6379 | grep TIME_WAIT | wc -l
446

在redis端口上居然有446个TIME_WAIT。我不知道这种情况能否算正常呢?假如不正常,应该优化哪些参数?

echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse

原理:redis的客户端close一个链接以后,这个链接就会进入TIME_WAIT形状,而TIME_WAIT形状的链接会在Max Segment Lifetime内都没有活泼包的情况下关失。Linux这个默许值貌似很长,详细的数值还真不知道,好像是分钟级的。。。
喜剧的是,一条TCP链接是逝世是活由源IP和端口,目标IP和端口四个变量决议。那客户端和效力器的这四个值都是结实的,以是每次树立新链接的同时,处在TIME_WAIT的链接也原告知,你还不克不及逝世。
以是实行上述下令,让tw形状的链接可以reuse

补充:/proc/sys/net/ipv4/tcp_tw_recycle 假如设成1的话,便是快速采取tw链接,应该也能处理题目

几百应该不算高,手动close衔接是说向Redis发送QUIT下令吗?假如是的话,由于发送了QUIT下令后,Redis会主动断开衔接,TCP中主动断开的一方的确会对峙TIME_WAIT一段工夫。真实几百个不是什么大题目,TW形状也不会占用太多资源。
关于避免TW过多,@gaosboy 说到了一点reuse,普通可以设置下面几个TCP参数来中断TCP衔接的优化。

vim /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
/sbin/sysctl -p //使之生效

不过我集团以为SF慢的缘由真的需求细查一下。网络衔接上的确没有任何题目的。而如今翻开页面至于是2s以上,均匀是3s多。假如优化优化,速率提拔个十倍以上应该不是题目。

请点击此题目中断反省http://sfau.lt/eHhgZN,可以处理你的题目了。

UP:缘由一样:

connect之后没主动封闭

细致拜见文档阐明

connect, open

Description

Connects to a Redis instance.

Parameters

host: string. can be a host, or the path to a unix domain socket

port: int, optional

timeout: float, value in seconds (optional,
default is 0 meaning unlimited)

请不要手动修正收回衔接的超时工夫, 操纵零碎设计这个超时是由于 客户端与效力器之间的传有可以有延时, 另有便是端口重用的题目. 以是最好用单例完成一个或多个衔接或运用衔接池.

(看完/读完)这篇文章有何感想! www.yzc577.com的分享…

发表评论

电子邮件地址不会被公开。 必填项已用*标注