Skip to content

优化网络层并发模型:实现连接协程“瘦身”#409

Open
redfox1999 wants to merge 6 commits into
aceld:masterfrom
redfox1999:perf/reduce-goroutine-overhead
Open

优化网络层并发模型:实现连接协程“瘦身”#409
redfox1999 wants to merge 6 commits into
aceld:masterfrom
redfox1999:perf/reduce-goroutine-overhead

Conversation

@redfox1999
Copy link
Copy Markdown

优化网络层并发模型:实现连接协程“瘦身”

🔍 概述 (Overview)

本 PR 对网络层的并发模型进行了重构,通过合并与解耦不必要的调度损耗,实现了每个连接减少 1 个常驻协程的优化目标:

  • 原同步发送 (SendMsg):单连接常驻协程由 2 个减至 1 个(C10K 峰值由 20K 降至 10K)。
  • 异步缓冲发送 (SendBuffMsg):单连接常驻协程由 3 个减至 2 个(C10K 峰值由 30K 降至 20K)。

优化后,系统在 C10K 基准测试(10,000 并发 × 1,000 次请求,共 10,000,000 次请求)中表现出了更低的调度开销、更高的吞吐量以及更稳定的长尾时延。


📊 优化前后全指标深度对比 (Benchmark Comparison)

方案模式 单连接协程 C10K 协程总数 运行期平均内存 有效 QPS P99 时延 最大时延
SendMsg 2 个 20,016 ~277.00 MB 62,417.26 249.54 ms 437.97 ms
SendMsg (优化) 1 个 10,016 ~273.61 MB 63,284.47 (最高) 233.80 ms 777.52 ms
收益与幅度的变化 -50% -10,000 -1.2% +1.4% -15.74 ms 长尾时延受GC扰动
--- --- --- --- --- --- ---
SendBuffMsg 3 个 30,016 ~682.88 MB 60,300.20 250.39 ms 612.38 ms
SendBuffMsg (优化) 2 个 20,016 ~672.47 MB 61,399.20 248.87 ms 503.16 ms
收益与幅度的变化 -33.3% -10,000 -1.5% +1.8% -1.52 ms -109.22 ms (明显改善)

💡 核心优化成果与技术分析

1. 大幅降低 Go 运行时调度成本 (Goroutine Scheduling Cost)

在并发连接达到 10,000 时,两种方案均成功在线减少了 10,000 个协程的上下文切换与调度开销。这使得 CPU 能够将更多算力投入到网络 I/O 与数据序列化本身,直接催生了 QPS 的全面普涨。优化后的同步方案(SendMsg)跑出了现阶段的性能峰值 63,284.47 QPS

2. 异步缓冲方案 (SendBuffMsg) 瘦身收益显著

  • 吞吐拉升:优化后的 SendBuffMsg 有效 QPS 提升了 1.8%(由 60.3K 升至 61.4K)。
  • 长尾时延收敛:最大响应时间从原来的 $612.38\text{ms}$ 压降至 $503.16\text{ms}$,P90、P95 及 P99 分位值全线收紧。这说明协程数量减少后,底层对 Channel 环形锁的竞争随之减弱,消息落入缓冲区的抖动得到了有效控制。

3. 内存控制与 GC 稳定性

  • 瘦身后的系统在密集运行期的平均内存表现更为平稳,消除了部分由于大量协程栈动态扩容/缩容引起的内存毛刺。
  • GC 回收验证:压测结束后,两个方案的协程均能完美回收至基准的 16 个;SendMsg 闲置内存回落至 5M,SendBuffMsg 回落至 9M,无任何资源残留与协程泄漏隐患。

🛠️ 改动清单 (Changes)

  • 重构网络连接的内部调度架构,剥离/合并冗余的读写协程。
  • 优化 SendMsg 逻辑,实现单连接单协程(1-Goroutine per Connection)的高效读写设计。
  • 优化 SendBuffMsg 机制,将单连接常驻协程缩减至 2 个,精简 Channel 监听链条。
  • 重新运行 C10K 基准测试,留存并验证高压力下的系统抗压稳定性与内存指标。

🧪 测试验证 (Verification)

  • 并发规格:10,000 强并发连接,单连接 1,000 次长连接请求,共计 10,000,000 成功响应。
  • 稳定性验证:多轮压测下,系统异常率、失败数均为 0,未触发任何边界数据丢失。
展开/收起 数据展示
修改前 10000 连接,服务器用SendMsg, 每个连接会使用2个协程,10000个连接,使用 20016个协程, 平均内存占用 277M
==============================
C10K Test Server starting on :8888
Connection stats time 2026-05-15 22:32:36 clients 0 goroutines 16 MEM: 0 MB
Connection stats time 2026-05-15 22:32:41 clients 10000 goroutines 20016 MEM: 240 MB
Connection stats time 2026-05-15 22:32:46 clients 10000 goroutines 20016 MEM: 264 MB
Connection stats time 2026-05-15 22:32:51 clients 10000 goroutines 20016 MEM: 246 MB
Connection stats time 2026-05-15 22:32:56 clients 10000 goroutines 20016 MEM: 370 MB
Connection stats time 2026-05-15 22:33:01 clients 10000 goroutines 20016 MEM: 271 MB
Connection stats time 2026-05-15 22:33:06 clients 10000 goroutines 20016 MEM: 196 MB
Connection stats time 2026-05-15 22:33:11 clients 10000 goroutines 20016 MEM: 292 MB
Connection stats time 2026-05-15 22:33:16 clients 10000 goroutines 20016 MEM: 197 MB
Connection stats time 2026-05-15 22:33:21 clients 10000 goroutines 20016 MEM: 318 MB
Connection stats time 2026-05-15 22:33:26 clients 10000 goroutines 20016 MEM: 240 MB
Connection stats time 2026-05-15 22:33:31 clients 10000 goroutines 20016 MEM: 353 MB
Connection stats time 2026-05-15 22:33:36 clients 10000 goroutines 20016 MEM: 276 MB
Connection stats time 2026-05-15 22:33:41 clients 10000 goroutines 20016 MEM: 196 MB
Connection stats time 2026-05-15 22:33:46 clients 10000 goroutines 20016 MEM: 310 MB
Connection stats time 2026-05-15 22:33:51 clients 10000 goroutines 20016 MEM: 222 MB
Connection stats time 2026-05-15 22:33:56 clients 10000 goroutines 20016 MEM: 339 MB
Connection stats time 2026-05-15 22:34:01 clients 10000 goroutines 20016 MEM: 259 MB
Connection stats time 2026-05-15 22:34:06 clients 10000 goroutines 20016 MEM: 372 MB
Connection stats time 2026-05-15 22:34:11 clients 10000 goroutines 20016 MEM: 234 MB
Connection stats time 2026-05-15 22:34:16 clients 10000 goroutines 20016 MEM: 273 MB
Connection stats time 2026-05-15 22:34:21 clients 10000 goroutines 20016 MEM: 379 MB
Connection stats time 2026-05-15 22:34:26 clients 10000 goroutines 20016 MEM: 303 MB
Connection stats time 2026-05-15 22:34:31 clients 10000 goroutines 20016 MEM: 226 MB
Connection stats time 2026-05-15 22:34:36 clients 10000 goroutines 20016 MEM: 345 MB
Connection stats time 2026-05-15 22:34:41 clients 10000 goroutines 20016 MEM: 273 MB
Connection stats time 2026-05-15 22:34:46 clients 10000 goroutines 20016 MEM: 199 MB
Connection stats time 2026-05-15 22:34:51 clients 10000 goroutines 20016 MEM: 295 MB
Connection stats time 2026-05-15 22:34:56 clients 10000 goroutines 20016 MEM: 209 MB
Connection stats time 2026-05-15 22:35:01 clients 10000 goroutines 20016 MEM: 307 MB
Connection stats time 2026-05-15 22:35:06 clients 10000 goroutines 20016 MEM: 235 MB
Connection stats time 2026-05-15 22:35:11 clients 10000 goroutines 20016 MEM: 335 MB
Connection stats time 2026-05-15 22:35:16 clients 10000 goroutines 20016 MEM: 256 MB
Connection stats time 2026-05-15 22:35:21 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:35:26 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:35:31 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:35:36 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:35:41 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:35:46 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:35:51 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:35:56 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:36:01 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:36:06 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:36:11 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:36:16 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:36:21 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:36:26 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:36:31 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:36:36 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:36:41 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:36:46 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:36:51 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:36:56 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:37:01 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:37:06 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:37:11 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:37:16 clients 0 goroutines 16 MEM: 376 MB
Connection stats time 2026-05-15 22:37:21 clients 0 goroutines 16 MEM: 9 MB
Connection stats time 2026-05-15 22:37:26 clients 0 goroutines 16 MEM: 9 MB
Connection stats time 2026-05-15 22:37:31 clients 0 goroutines 16 MEM: 9 MB
Connection stats time 2026-05-15 22:37:36 clients 0 goroutines 16 MEM: 9 MB
Connection stats time 2026-05-15 22:37:41 clients 0 goroutines 16 MEM: 9 MB
Connection stats time 2026-05-15 22:37:46 clients 0 goroutines 16 MEM: 9 MB


启动压测: 10000 并发连接, 每个连接请求 1000 次

==================================================
🏁 压测报告
总耗时: 160.21 秒
成功次数: 10000000
失败次数: 0
有效 QPS: 62417.26
--------------------------------------------------
响应时间 (ms):
  平均: 154.39
  最小: 0.03
  P50:  147.10
  P90:  192.05
  P95:  210.76
  P99:  249.54
  最大: 437.97
==================================================

响应时间分布 (ms):
--------------------------------------------------
   0-  50ms:     5053 ( 0.05%)
  50- 100ms:    10142 ( 0.10%)
 100- 150ms:  5499493 (54.99%) ████████████████████████████████████████
 150- 200ms:  3735324 (37.35%) ███████████████████████████
 200- 250ms:   652147 ( 6.52%) ████
 250- 300ms:    91550 ( 0.92%)
 300- 350ms:     4690 ( 0.05%)
 350- 400ms:     1058 ( 0.01%)
 400- 450ms:      543 ( 0.01%)
 450- 500ms:        0 ( 0.00%)
 500- 550ms:        0 ( 0.00%)
 550- 600ms:        0 ( 0.00%)
 600- 650ms:        0 ( 0.00%)
 650- 700ms:        0 ( 0.00%)
 700- 750ms:        0 ( 0.00%)
 750- 800ms:        0 ( 0.00%)
 800- 850ms:        0 ( 0.00%)
 850- 900ms:        0 ( 0.00%)
 900- 950ms:        0 ( 0.00%)
 950-1000ms:        0 ( 0.00%)


使用 SendBuffMsg 时。每个连接会有3个协程。 10000个连接,用使用了 30016个协程。内存占用 682.88 MB

C10K Test Server starting on :8888
Connection stats time 2026-05-15 22:48:09 clients 7398 goroutines 22401 MEM: 348 MB
Connection stats time 2026-05-15 22:48:14 clients 10000 goroutines 30016 MEM: 695 MB
Connection stats time 2026-05-15 22:48:19 clients 10000 goroutines 30016 MEM: 722 MB
Connection stats time 2026-05-15 22:48:24 clients 10000 goroutines 30016 MEM: 680 MB
Connection stats time 2026-05-15 22:48:29 clients 10000 goroutines 30016 MEM: 629 MB
Connection stats time 2026-05-15 22:48:34 clients 10000 goroutines 30016 MEM: 581 MB
Connection stats time 2026-05-15 22:48:39 clients 10000 goroutines 30016 MEM: 866 MB
Connection stats time 2026-05-15 22:48:44 clients 10000 goroutines 30016 MEM: 701 MB
Connection stats time 2026-05-15 22:48:49 clients 10000 goroutines 30016 MEM: 526 MB
Connection stats time 2026-05-15 22:48:54 clients 10000 goroutines 30016 MEM: 818 MB
Connection stats time 2026-05-15 22:48:59 clients 10000 goroutines 30016 MEM: 652 MB
Connection stats time 2026-05-15 22:49:04 clients 10000 goroutines 30016 MEM: 481 MB
Connection stats time 2026-05-15 22:49:09 clients 10000 goroutines 30016 MEM: 764 MB
Connection stats time 2026-05-15 22:49:14 clients 10000 goroutines 30016 MEM: 599 MB
Connection stats time 2026-05-15 22:49:19 clients 10000 goroutines 30016 MEM: 894 MB
Connection stats time 2026-05-15 22:49:24 clients 10000 goroutines 30016 MEM: 709 MB
Connection stats time 2026-05-15 22:49:29 clients 10000 goroutines 30016 MEM: 534 MB
Connection stats time 2026-05-15 22:49:34 clients 10000 goroutines 30016 MEM: 835 MB
Connection stats time 2026-05-15 22:49:39 clients 10000 goroutines 30016 MEM: 661 MB
Connection stats time 2026-05-15 22:49:44 clients 10000 goroutines 30016 MEM: 495 MB
Connection stats time 2026-05-15 22:49:49 clients 10000 goroutines 30016 MEM: 787 MB
Connection stats time 2026-05-15 22:49:54 clients 10000 goroutines 30016 MEM: 618 MB
Connection stats time 2026-05-15 22:49:59 clients 10000 goroutines 30016 MEM: 899 MB
Connection stats time 2026-05-15 22:50:04 clients 10000 goroutines 30016 MEM: 723 MB
Connection stats time 2026-05-15 22:50:09 clients 10000 goroutines 30016 MEM: 544 MB
Connection stats time 2026-05-15 22:50:14 clients 10000 goroutines 30016 MEM: 830 MB
Connection stats time 2026-05-15 22:50:19 clients 10000 goroutines 30016 MEM: 650 MB
Connection stats time 2026-05-15 22:50:24 clients 10000 goroutines 30016 MEM: 488 MB
Connection stats time 2026-05-15 22:50:29 clients 10000 goroutines 30016 MEM: 764 MB
Connection stats time 2026-05-15 22:50:34 clients 10000 goroutines 30016 MEM: 581 MB
Connection stats time 2026-05-15 22:50:39 clients 10000 goroutines 30016 MEM: 868 MB
Connection stats time 2026-05-15 22:50:44 clients 10000 goroutines 30016 MEM: 711 MB
Connection stats time 2026-05-15 22:50:49 clients 10000 goroutines 30016 MEM: 547 MB
Connection stats time 2026-05-15 22:50:54 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:50:59 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:51:04 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:51:09 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:51:14 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:51:19 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:51:24 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:51:29 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:51:34 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:51:39 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:51:44 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:51:49 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:51:54 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:51:59 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:52:04 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:52:09 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:52:14 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:52:19 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:52:24 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:52:29 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:52:34 clients 0 goroutines 16 MEM: 842 MB
Connection stats time 2026-05-15 22:52:39 clients 1 goroutines 18 MEM: 842 MB
Connection stats time 2026-05-15 22:52:44 clients 1 goroutines 18 MEM: 842 MB
Connection stats time 2026-05-15 22:52:49 clients 1 goroutines 18 MEM: 842 MB
Connection stats time 2026-05-15 22:52:54 clients 1 goroutines 18 MEM: 14 MB
Connection stats time 2026-05-15 22:52:59 clients 1 goroutines 18 MEM: 14 MB
Connection stats time 2026-05-15 22:53:04 clients 0 goroutines 16 MEM: 14 MB
Connection stats time 2026-05-15 22:53:09 clients 1 goroutines 18 MEM: 14 MB
Connection stats time 2026-05-15 22:53:14 clients 1 goroutines 18 MEM: 14 MB
Connection stats time 2026-05-15 22:53:19 clients 1 goroutines 18 MEM: 14 MB
Connection stats time 2026-05-15 22:53:24 clients 0 goroutines 16 MEM: 14 MB
Connection stats time 2026-05-15 22:53:29 clients 0 goroutines 16 MEM: 14 MB
Connection stats time 2026-05-15 22:53:34 clients 0 goroutines 16 MEM: 14 MB
Connection stats time 2026-05-15 22:53:39 clients 0 goroutines 16 MEM: 14 MB
Connection stats time 2026-05-15 22:53:44 clients 0 goroutines 16 MEM: 14 MB

 启动压测: 10000 并发连接, 每个连接请求 1000 次

==================================================
🏁 压测报告
总耗时: 165.84 秒
成功次数: 10000000
失败次数: 0
有效 QPS: 60300.20
--------------------------------------------------
响应时间 (ms):
  平均: 159.57
  最小: 0.04
  P50:  152.84
  P90:  195.29
  P95:  214.30
  P99:  250.39
  最大: 612.38
==================================================

响应时间分布 (ms):
--------------------------------------------------
   0-  50ms:     3101 ( 0.03%)
  50- 100ms:     6555 ( 0.07%)
 100- 150ms:  4415938 (44.16%) █████████████████████████████████████
 150- 200ms:  4736345 (47.36%) ████████████████████████████████████████
 200- 250ms:   736364 ( 7.36%) ██████
 250- 300ms:    68943 ( 0.69%)
 300- 350ms:    21972 ( 0.22%)
 350- 400ms:     8746 ( 0.09%)
 400- 450ms:      660 ( 0.01%)
 450- 500ms:      967 ( 0.01%)
 500- 550ms:      334 ( 0.00%)
 550- 600ms:       72 ( 0.00%)
 600- 650ms:        3 ( 0.00%)
 650- 700ms:        0 ( 0.00%)
 700- 750ms:        0 ( 0.00%)
 750- 800ms:        0 ( 0.00%)
 800- 850ms:        0 ( 0.00%)
 850- 900ms:        0 ( 0.00%)
 900- 950ms:        0 ( 0.00%)
 950-1000ms:        0 ( 0.00%)
--------------------------------------------------


修改后 10000 连接,服务器用SendMsg, 每个连接会使用1个协程,10000个连接,使用 10016个协程 平均内存占用  273.61 M

==============================
C10K Test Server starting on :8888
Connection stats time 2026-05-15 22:56:57 clients 10000 goroutines 10016 MEM: 202 MB
Connection stats time 2026-05-15 22:57:02 clients 10000 goroutines 10016 MEM: 310 MB
Connection stats time 2026-05-15 22:57:07 clients 10000 goroutines 10016 MEM: 214 MB
Connection stats time 2026-05-15 22:57:12 clients 10000 goroutines 10016 MEM: 325 MB
Connection stats time 2026-05-15 22:57:17 clients 10000 goroutines 10016 MEM: 263 MB
Connection stats time 2026-05-15 22:57:22 clients 10000 goroutines 10016 MEM: 187 MB
Connection stats time 2026-05-15 22:57:27 clients 10000 goroutines 10016 MEM: 309 MB
Connection stats time 2026-05-15 22:57:32 clients 10000 goroutines 10016 MEM: 235 MB
Connection stats time 2026-05-15 22:57:37 clients 10000 goroutines 10016 MEM: 358 MB
Connection stats time 2026-05-15 22:57:42 clients 10000 goroutines 10016 MEM: 290 MB
Connection stats time 2026-05-15 22:57:47 clients 10000 goroutines 10016 MEM: 230 MB
Connection stats time 2026-05-15 22:57:52 clients 10000 goroutines 10016 MEM: 359 MB
Connection stats time 2026-05-15 22:57:57 clients 10000 goroutines 10016 MEM: 299 MB
Connection stats time 2026-05-15 22:58:02 clients 10000 goroutines 10016 MEM: 236 MB
Connection stats time 2026-05-15 22:58:07 clients 10000 goroutines 10016 MEM: 348 MB
Connection stats time 2026-05-15 22:58:12 clients 10000 goroutines 10016 MEM: 273 MB
Connection stats time 2026-05-15 22:58:17 clients 10000 goroutines 10016 MEM: 197 MB
Connection stats time 2026-05-15 22:58:22 clients 10000 goroutines 10016 MEM: 318 MB
Connection stats time 2026-05-15 22:58:27 clients 10000 goroutines 10016 MEM: 248 MB
Connection stats time 2026-05-15 22:58:32 clients 10000 goroutines 10016 MEM: 193 MB
Connection stats time 2026-05-15 22:58:37 clients 10000 goroutines 10016 MEM: 310 MB
Connection stats time 2026-05-15 22:58:42 clients 10000 goroutines 10016 MEM: 241 MB
Connection stats time 2026-05-15 22:58:47 clients 10000 goroutines 10016 MEM: 368 MB
Connection stats time 2026-05-15 22:58:52 clients 10000 goroutines 10016 MEM: 297 MB
Connection stats time 2026-05-15 22:58:57 clients 10000 goroutines 10016 MEM: 236 MB
Connection stats time 2026-05-15 22:59:02 clients 10000 goroutines 10016 MEM: 287 MB
Connection stats time 2026-05-15 22:59:07 clients 10000 goroutines 10016 MEM: 223 MB
Connection stats time 2026-05-15 22:59:12 clients 10000 goroutines 10016 MEM: 336 MB
Connection stats time 2026-05-15 22:59:17 clients 10000 goroutines 10016 MEM: 265 MB
Connection stats time 2026-05-15 22:59:22 clients 10000 goroutines 10016 MEM: 200 MB
Connection stats time 2026-05-15 22:59:27 clients 10000 goroutines 10016 MEM: 325 MB
Connection stats time 2026-05-15 22:59:32 clients 9970 goroutines 9986 MEM: 261 MB
Connection stats time 2026-05-15 22:59:37 clients 0 goroutines 16 MEM: 358 MB
Connection stats time 2026-05-15 22:59:42 clients 1 goroutines 17 MEM: 358 MB
Connection stats time 2026-05-15 22:59:47 clients 1 goroutines 17 MEM: 358 MB
Connection stats time 2026-05-15 22:59:52 clients 1 goroutines 17 MEM: 358 MB
Connection stats time 2026-05-15 22:59:57 clients 1 goroutines 17 MEM: 358 MB
Connection stats time 2026-05-15 23:00:02 clients 1 goroutines 17 MEM: 358 MB
Connection stats time 2026-05-15 23:00:07 clients 1 goroutines 17 MEM: 358 MB
Connection stats time 2026-05-15 23:00:12 clients 1 goroutines 17 MEM: 358 MB
Connection stats time 2026-05-15 23:00:17 clients 1 goroutines 17 MEM: 358 MB
Connection stats time 2026-05-15 23:00:22 clients 2 goroutines 18 MEM: 358 MB
Connection stats time 2026-05-15 23:00:27 clients 2 goroutines 18 MEM: 358 MB
Connection stats time 2026-05-15 23:00:32 clients 2 goroutines 18 MEM: 358 MB
Connection stats time 2026-05-15 23:00:37 clients 2 goroutines 18 MEM: 358 MB
Connection stats time 2026-05-15 23:00:42 clients 1 goroutines 17 MEM: 358 MB
Connection stats time 2026-05-15 23:00:47 clients 1 goroutines 17 MEM: 358 MB
Connection stats time 2026-05-15 23:00:52 clients 2 goroutines 18 MEM: 358 MB
Connection stats time 2026-05-15 23:00:57 clients 2 goroutines 18 MEM: 358 MB
Connection stats time 2026-05-15 23:01:02 clients 2 goroutines 18 MEM: 358 MB
Connection stats time 2026-05-15 23:01:07 clients 2 goroutines 18 MEM: 358 MB
Connection stats time 2026-05-15 23:01:12 clients 2 goroutines 18 MEM: 358 MB
Connection stats time 2026-05-15 23:01:17 clients 2 goroutines 18 MEM: 358 MB
Connection stats time 2026-05-15 23:01:22 clients 1 goroutines 17 MEM: 358 MB
Connection stats time 2026-05-15 23:01:27 clients 1 goroutines 17 MEM: 358 MB
Connection stats time 2026-05-15 23:01:32 clients 1 goroutines 17 MEM: 358 MB
Connection stats time 2026-05-15 23:01:37 clients 1 goroutines 17 MEM: 5 MB
Connection stats time 2026-05-15 23:01:42 clients 1 goroutines 17 MEM: 5 MB


启动压测: 10000 并发连接, 每个连接请求 1000 次

==================================================
🏁 压测报告
总耗时: 158.02 秒
成功次数: 10000000
失败次数: 0
有效 QPS: 63284.47
--------------------------------------------------
响应时间 (ms):
  平均: 151.93
  最小: 0.03
  P50:  146.74
  P90:  184.92
  P95:  200.10
  P99:  233.80
  最大: 777.52
==================================================

响应时间分布 (ms):
--------------------------------------------------
   0-  50ms:    13999 ( 0.14%)
  50- 100ms:    53578 ( 0.54%)
 100- 150ms:  5586153 (55.86%) ████████████████████████████████████████
 150- 200ms:  3843685 (38.44%) ███████████████████████████
 200- 250ms:   446787 ( 4.47%) ███
 250- 300ms:    44638 ( 0.45%)
 300- 350ms:     7948 ( 0.08%)
 350- 400ms:     2721 ( 0.03%)
 400- 450ms:      487 ( 0.00%)
 450- 500ms:        2 ( 0.00%)
 500- 550ms:        1 ( 0.00%)
 550- 600ms:        0 ( 0.00%)
 600- 650ms:        0 ( 0.00%)
 650- 700ms:        0 ( 0.00%)
 700- 750ms:        0 ( 0.00%)
 750- 800ms:        1 ( 0.00%)
 800- 850ms:        0 ( 0.00%)
 850- 900ms:        0 ( 0.00%)
 900- 950ms:        0 ( 0.00%)
 950-1000ms:        0 ( 0.00%)
--------------------------------------------------


修改后 10000 连接,服务器用SendBuffMsg, 每个连接会使用2个协程,10000个连接,使用 20016个协程 平均内存占用 672.47  M


C10K Test Server starting on :8888
Connection stats time 2026-05-15 23:03:12 clients 10000 goroutines 20016 MEM: 539 MB
Connection stats time 2026-05-15 23:03:17 clients 10000 goroutines 20016 MEM: 498 MB
Connection stats time 2026-05-15 23:03:22 clients 10000 goroutines 20016 MEM: 459 MB
Connection stats time 2026-05-15 23:03:27 clients 10000 goroutines 20016 MEM: 751 MB
Connection stats time 2026-05-15 23:03:32 clients 10000 goroutines 20016 MEM: 710 MB
Connection stats time 2026-05-15 23:03:37 clients 10000 goroutines 20016 MEM: 666 MB
Connection stats time 2026-05-15 23:03:42 clients 10000 goroutines 20016 MEM: 516 MB
Connection stats time 2026-05-15 23:03:47 clients 10000 goroutines 20016 MEM: 819 MB
Connection stats time 2026-05-15 23:03:52 clients 10000 goroutines 20016 MEM: 663 MB
Connection stats time 2026-05-15 23:03:57 clients 10000 goroutines 20016 MEM: 512 MB
Connection stats time 2026-05-15 23:04:02 clients 10000 goroutines 20016 MEM: 805 MB
Connection stats time 2026-05-15 23:04:07 clients 10000 goroutines 20016 MEM: 642 MB
Connection stats time 2026-05-15 23:04:12 clients 10000 goroutines 20016 MEM: 476 MB
Connection stats time 2026-05-15 23:04:17 clients 10000 goroutines 20016 MEM: 781 MB
Connection stats time 2026-05-15 23:04:22 clients 10000 goroutines 20016 MEM: 617 MB
Connection stats time 2026-05-15 23:04:27 clients 10000 goroutines 20016 MEM: 899 MB
Connection stats time 2026-05-15 23:04:32 clients 10000 goroutines 20016 MEM: 739 MB
Connection stats time 2026-05-15 23:04:37 clients 10000 goroutines 20016 MEM: 583 MB
Connection stats time 2026-05-15 23:04:42 clients 10000 goroutines 20016 MEM: 879 MB
Connection stats time 2026-05-15 23:04:47 clients 10000 goroutines 20016 MEM: 724 MB
Connection stats time 2026-05-15 23:04:52 clients 10000 goroutines 20016 MEM: 576 MB
Connection stats time 2026-05-15 23:04:57 clients 10000 goroutines 20016 MEM: 869 MB
Connection stats time 2026-05-15 23:05:02 clients 10000 goroutines 20016 MEM: 717 MB
Connection stats time 2026-05-15 23:05:07 clients 10000 goroutines 20016 MEM: 552 MB
Connection stats time 2026-05-15 23:05:12 clients 10000 goroutines 20016 MEM: 853 MB
Connection stats time 2026-05-15 23:05:17 clients 10000 goroutines 20016 MEM: 689 MB
Connection stats time 2026-05-15 23:05:22 clients 10000 goroutines 20016 MEM: 533 MB
Connection stats time 2026-05-15 23:05:27 clients 10000 goroutines 20016 MEM: 827 MB
Connection stats time 2026-05-15 23:05:32 clients 10000 goroutines 20016 MEM: 665 MB
Connection stats time 2026-05-15 23:05:37 clients 10000 goroutines 20016 MEM: 514 MB
Connection stats time 2026-05-15 23:05:42 clients 10000 goroutines 20016 MEM: 818 MB
Connection stats time 2026-05-15 23:05:47 clients 10000 goroutines 20016 MEM: 648 MB
Connection stats time 2026-05-15 23:05:52 clients 9381 goroutines 18784 MEM: 482 MB
Connection stats time 2026-05-15 23:05:57 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:06:02 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:06:07 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:06:12 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:06:17 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:06:22 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:06:27 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:06:32 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:06:37 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:06:42 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:06:47 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:06:52 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:06:57 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:07:02 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:07:07 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:07:12 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:07:17 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:07:22 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:07:27 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:07:32 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:07:37 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:07:42 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:07:47 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:07:52 clients 0 goroutines 16 MEM: 505 MB
Connection stats time 2026-05-15 23:07:57 clients 0 goroutines 16 MEM: 9 MB
Connection stats time 2026-05-15 23:08:02 clients 0 goroutines 16 MEM: 9 MB

启动压测: 10000 并发连接, 每个连接请求 1000 次

==================================================
🏁 压测报告
总耗时: 162.87 秒
成功次数: 10000000
失败次数: 0
有效 QPS: 61399.20
--------------------------------------------------
响应时间 (ms):
  平均: 156.98
  最小: 0.04
  P50:  149.01
  P90:  194.76
  P95:  211.91
  P99:  248.87
  最大: 503.16
==================================================

响应时间分布 (ms):
--------------------------------------------------
   0-  50ms:     1507 ( 0.02%)
  50- 100ms:     2352 ( 0.02%)
 100- 150ms:  5203145 (52.03%) ████████████████████████████████████████
 150- 200ms:  3973885 (39.74%) ██████████████████████████████
 200- 250ms:   722605 ( 7.23%) █████
 250- 300ms:    68882 ( 0.69%)
 300- 350ms:    13866 ( 0.14%)
 350- 400ms:    12325 ( 0.12%)
 400- 450ms:      694 ( 0.01%)
 450- 500ms:      732 ( 0.01%)
 500- 550ms:        7 ( 0.00%)
 550- 600ms:        0 ( 0.00%)
 600- 650ms:        0 ( 0.00%)
 650- 700ms:        0 ( 0.00%)
 700- 750ms:        0 ( 0.00%)
 750- 800ms:        0 ( 0.00%)
 800- 850ms:        0 ( 0.00%)
 850- 900ms:        0 ( 0.00%)
 900- 950ms:        0 ( 0.00%)
 950-1000ms:        0 ( 0.00%)
--------------------------------------------------


1. 优化连接关闭逻辑,在reader协程中统一执行清理操作
2. 新增client_v2压测客户端,支持多尺寸数据包、随机发包策略与重连模拟
3. 扩展c10k测试服务端,添加小/中/大数据包路由处理
4. 添加client_v2二进制编译支持与gitignore规则
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant