linux上的机器之间的tcp/ip连接数量是否有限制?

ero*_*ppa 25 sockets linux tcp

我有一个非常简单的程序,在5分钟内编写,打开一个服务器套接字并循环遍历请求,并将发送给它的字节打印到屏幕.

然后我尝试对可以使用多少个连接进行基准测试,以试图找出我可以用这个程序支持多少并发用户.

在另一台机器上(它们之间的网络没有饱和)我创建了一个简单的程序,它进入循环并连接到服务器机器并发送字节"hello world".

当循环为1000-3000时,客户端完成所有发送的请求.当循环超过5000时,在完成第一个X个请求后开始超时.为什么是这样?我确保在循环中关闭我的套接字.

你能在一段时间内创建这么多连接吗?

这个限制是否仅适用于同一台机器,我不必担心生产中5000多个请求都来自不同的机器?

Jas*_*hen 27

有一个限制,是的.见ulimit.

你还需要考虑TIMED_WAIT国家.一旦TCP套接字被关闭(默认)的端口仍然占据TIMED_WAIT状态2分钟.该值是可调的.即使它们已关闭,这也会"让你脱离插座".

运行netstat以查看正在运行的TIMED_WAIT内容.

PS原因TIMED_WAIT是处理套接字关闭后到达的数据包的情况.这可能发生,因为数据包被延迟或者另一方只是不知道套接字已经关闭.这允许操作系统以静默方式丢弃这些数据包,而不会"感染"另一个不相关的套接字连接.


DGM*_*DGM 8

在寻找最高性能时,会遇到很多问题和潜在的瓶颈.运行一个简单的hello world测试并不一定能找到它们.

可能的限制包括:

  • 内核套接字限制:查看/proc/sys/net 大量内核调优.
  • 过程限制:ulimit如其他人在此处所述,请查看
  • 随着应用程序的复杂性增加,它可能没有足够的CPU能力来跟上进入的连接数量.top用来查看你的CPU是否达到最大值
  • 线程数?我没有经验的线程,但这可能会与之前的项目一起发挥作用.