5,000,000 个持久连接,200,000,000 条消息,使用 Project Loom 的单个进程出现 0 个错误。
Project Loom C5M 是一个使用OpenJDK Project Loom 虚拟线程在客户端和服务器 Java 应用程序中分别实现 500 万个持久连接的实验。
C5M 名称的灵感来自于 1999 年提出的C10k 问题。
该项目由两个简单的组件EchoServer和EchoClient.
EchoServer创建许多 TCP 被动服务器套接字,当它们进入时接受每个新连接。对于创建的每个活动套接字,EchoServer接收字节并回显它们。
EchoClient向单个目标服务器上的一系列端口发起许多传出 TCP 连接。对于创建的每个套接字,EchoClient向服务器发送一条消息,等待响应,并在再次发送之前进入睡眠状态。
EchoClient如果发生以下任何情况,立即终止:
- 连接超时
- 套接字读取超时
- 收到消息的完整性错误
- TCP 连接关闭
- TCP 连接重置
- 任何其他意外的 I/O 条件
以下关于使用 Erlang 实现 100 万个持久连接的文章在这方面非常有帮助
/etc/sysctl.conf:
fs.file-max=10485760 |
/etc/security/limits.conf:
* soft nofile 8000000 |
两台服务器级主机用于裸机测试:
- HPE ProLiant BL460c Gen10
- 2 个 20 核 CPU
- 128GB 内存
- 至强金牌 6230 CPU
- CentOS 7.9
- Project Loom Early Access Build 19-loom+5-429 (2022/4/4) 来自https://jdk.java.net/loom/
服务器以 [9000, 9099] 的被动服务器端口范围启动。
客户端使用相同的服务器目标端口范围和每端口连接数 50,000 启动,总共有 5,000,000 个目标连接。
我在连续运行大约 40 分钟后停止了实验。没有发生上述任何错误、关闭或超时。
点击标题
Loom更早版本测试比较项目。