Redian新闻
>
求救网络大牛们,如何处理tcp短连接
avatar
求救网络大牛们,如何处理tcp短连接# Programming - 葵花宝典
s*l
1
有一个TCP server比较old school,收一个request,计算返回然后close tcp
connection。
现在要做benchmark,客户端开10个线程,发1百万个请求来测试Req/Sec。
大概70万就connection timeout了,server side一大堆的TIME_WAIT的connection。
奇怪的是每次connect timeout客户端ssh竟然断掉了。
benchmark只是拿2个VM来做,所以实际上还有空间。
同样的实验,用udp可以完成。
avatar
w*g
2
应该是file descriptor用完了。这个TIME_WAIT是一个经典问题,我经常碰到,
但是我也不知道正确的解决办法是什么,同问一下。
seastar+DPDK似乎没这个问题。1GB网卡背对背连能做到500K req/s。

【在 s****l 的大作中提到】
: 有一个TCP server比较old school,收一个request,计算返回然后close tcp
: connection。
: 现在要做benchmark,客户端开10个线程,发1百万个请求来测试Req/Sec。
: 大概70万就connection timeout了,server side一大堆的TIME_WAIT的connection。
: 奇怪的是每次connect timeout客户端ssh竟然断掉了。
: benchmark只是拿2个VM来做,所以实际上还有空间。
: 同样的实验,用udp可以完成。

avatar
n*t
3
http://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux
参考一下。另外,谁先 close?

【在 s****l 的大作中提到】
: 有一个TCP server比较old school,收一个request,计算返回然后close tcp
: connection。
: 现在要做benchmark,客户端开10个线程,发1百万个请求来测试Req/Sec。
: 大概70万就connection timeout了,server side一大堆的TIME_WAIT的connection。
: 奇怪的是每次connect timeout客户端ssh竟然断掉了。
: benchmark只是拿2个VM来做,所以实际上还有空间。
: 同样的实验,用udp可以完成。

avatar
z*0
4
Linux不大清楚,记得Windows里面TCP连接关掉后系统不是马上回收,如果短时间内有
很多连接就不行了。可以用连接池吧?

【在 s****l 的大作中提到】
: 有一个TCP server比较old school,收一个request,计算返回然后close tcp
: connection。
: 现在要做benchmark,客户端开10个线程,发1百万个请求来测试Req/Sec。
: 大概70万就connection timeout了,server side一大堆的TIME_WAIT的connection。
: 奇怪的是每次connect timeout客户端ssh竟然断掉了。
: benchmark只是拿2个VM来做,所以实际上还有空间。
: 同样的实验,用udp可以完成。

avatar
a9
5
问魏老师

【在 s****l 的大作中提到】
: 有一个TCP server比较old school,收一个request,计算返回然后close tcp
: connection。
: 现在要做benchmark,客户端开10个线程,发1百万个请求来测试Req/Sec。
: 大概70万就connection timeout了,server side一大堆的TIME_WAIT的connection。
: 奇怪的是每次connect timeout客户端ssh竟然断掉了。
: benchmark只是拿2个VM来做,所以实际上还有空间。
: 同样的实验,用udp可以完成。

avatar
w*m
6
无解。
你这是DDoS。内存耗尽了。
解决了估计能得图灵奖。
据说windows server这种情况挺的更久一点。
avatar
s*l
7
请问为什么是内存耗尽了

【在 w********m 的大作中提到】
: 无解。
: 你这是DDoS。内存耗尽了。
: 解决了估计能得图灵奖。
: 据说windows server这种情况挺的更久一点。

avatar
p*o
8
我觉得你说的对。我ubuntu 默认的file descriptor 上限是 780013, 跟楼主说的70万
的时候timeout 很接近。cat /proc/sys/fs/file-max
"The operating system uses file descriptors to handle file-system files as
well as pseudo files, such as connections and listener sockets." oracle doc
里的。

【在 w***g 的大作中提到】
: 应该是file descriptor用完了。这个TIME_WAIT是一个经典问题,我经常碰到,
: 但是我也不知道正确的解决办法是什么,同问一下。
: seastar+DPDK似乎没这个问题。1GB网卡背对背连能做到500K req/s。

avatar
c*e
9
tcp server有很多种啊,multi process, multi-threading, async
你用的哪种?

【在 s****l 的大作中提到】
: 有一个TCP server比较old school,收一个request,计算返回然后close tcp
: connection。
: 现在要做benchmark,客户端开10个线程,发1百万个请求来测试Req/Sec。
: 大概70万就connection timeout了,server side一大堆的TIME_WAIT的connection。
: 奇怪的是每次connect timeout客户端ssh竟然断掉了。
: benchmark只是拿2个VM来做,所以实际上还有空间。
: 同样的实验,用udp可以完成。

avatar
H*S
10
用tcp port multiplexer复用端口

【在 s****l 的大作中提到】
: 有一个TCP server比较old school,收一个request,计算返回然后close tcp
: connection。
: 现在要做benchmark,客户端开10个线程,发1百万个请求来测试Req/Sec。
: 大概70万就connection timeout了,server side一大堆的TIME_WAIT的connection。
: 奇怪的是每次connect timeout客户端ssh竟然断掉了。
: benchmark只是拿2个VM来做,所以实际上还有空间。
: 同样的实验,用udp可以完成。

avatar
s*e
11
did you try 'persistent connection' ?

【在 s****l 的大作中提到】
: 有一个TCP server比较old school,收一个request,计算返回然后close tcp
: connection。
: 现在要做benchmark,客户端开10个线程,发1百万个请求来测试Req/Sec。
: 大概70万就connection timeout了,server side一大堆的TIME_WAIT的connection。
: 奇怪的是每次connect timeout客户端ssh竟然断掉了。
: benchmark只是拿2个VM来做,所以实际上还有空间。
: 同样的实验,用udp可以完成。

avatar
l*p
13
google SO_REUSEADDR option 允许进入time_WAIT端口重用
要么你直接更暴力一点, RST connection rather than decently close connection(
FIN): S_LINGER = 0

【在 w***g 的大作中提到】
: 应该是file descriptor用完了。这个TIME_WAIT是一个经典问题,我经常碰到,
: 但是我也不知道正确的解决办法是什么,同问一下。
: seastar+DPDK似乎没这个问题。1GB网卡背对背连能做到500K req/s。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。