linux - 有多少长期存在的并发 TCP session 被认为是合理的?

标签 linux asynchronous tcp server

我正在 Linux 中开发一个 TCP 服务器,它最初可以处理数千个并发客户端,这些客户端旨在长期存在。然而,在开始实现一些功能之后,我为那些阻塞的调用创建了一个线程池,这些调用应该分开完成,比如数据库或磁盘访问。

经过一些测试,在请求“许多”异步函数的高负载下,由于许多任务被排队,我的服务器开始滞后,因为它们到达的速度快于它们的处理速度。这些任务在纳秒内解决,但有数千个。我明白这是完全正常的。

我当然可以在负载均衡器后面成长或购买具有更多内核的更好服务器,但是,在实践中和作为行业标准,在这样的服务器中有多少并发的长期 TCP session 被认为是“好”数字像我描述的这个?我怎么能说我得到的并发连接数“足够好”呢?

最佳答案

不幸的是,没有一个神奇的数字来回答你的问题,但我有一些注意事项让你找到你的号码:

  • 首先,每个操作系统都有自己的最大数量 同时连接,因为端口号是有限的。所以 检查你是否没有侵入这个号码,否则每一个新的 连接将被您的服务器拒绝。
  • 为了确定有多少同时连接对您来说是合适的,您必须为您的服务建立最大响应时间。

请记住,即使同时连接、多核 CPU 等...响应也会由同一个网络发出并出现瓶颈。因此,我建议您对您的架构进行负载和压力测试,以找到您可以接受的延迟限制。


TL;DR: 没有神奇的答案,您应该进行负载和压力测试才能找到它。

关于linux - 有多少长期存在的并发 TCP session 被认为是合理的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56152389/

相关文章:

c - Linux 上的 AzSmb 源代码编译错误?

Linux 显示详细/技术文件信息

swift - 如何处理登录 View

.net - 基于事件的异步模式有哪些替代方案?

c - C 中 "On demand"服务器中的共享内存结构

linux - 什么存储在线程的堆栈中?

java - 使用 docker 在具有 Java 7 的服务器上运行 Java 8 应用程序

c# - 设置Label内容,5秒后消失

c++ - 通过 c/c++ 中的 tcp 套接字发送时数据被切断

java - 无论如何,谁关闭了那个 socket ?