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是处理套接字关闭后到达的数据包的情况.这可能发生,因为数据包被延迟或者另一方只是不知道套接字已经关闭.这允许操作系统以静默方式丢弃这些数据包,而不会"感染"另一个不相关的套接字连接.
在寻找最高性能时,会遇到很多问题和潜在的瓶颈.运行一个简单的hello world测试并不一定能找到它们.
可能的限制包括:
/proc/sys/net 大量内核调优.ulimit如其他人在此处所述,请查看top用来查看你的CPU是否达到最大值