Skip to content

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

Merged
aceld merged 6 commits into
aceld:masterfrom
redfox1999:perf/reduce-goroutine-overhead
Jun 6, 2026
Merged

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

Conversation

@redfox1999

Copy link
Copy Markdown
Contributor

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

🔍 概述 (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 协程总数运行期平均内存有效 QPSP99 时延最大时延
SendMsg2 个20,016~277.00 MB62,417.26249.54 ms437.97 ms
SendMsg (优化)1 个10,016~273.61 MB63,284.47(最高)233.80 ms777.52 ms
收益与幅度的变化-50%-10,000-1.2%+1.4%-15.74 ms长尾时延受GC扰动
---------------------
SendBuffMsg3 个30,016~682.88 MB60,300.20250.39 ms612.38 ms
SendBuffMsg (优化)2 个20,016~672.47 MB61,399.20248.87 ms503.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 :8888Connection stats time 2026-05-15 22:32:36 clients 0 goroutines 16 MEM: 0 MBConnection stats time 2026-05-15 22:32:41 clients 10000 goroutines 20016 MEM: 240 MBConnection stats time 2026-05-15 22:32:46 clients 10000 goroutines 20016 MEM: 264 MBConnection stats time 2026-05-15 22:32:51 clients 10000 goroutines 20016 MEM: 246 MBConnection stats time 2026-05-15 22:32:56 clients 10000 goroutines 20016 MEM: 370 MBConnection stats time 2026-05-15 22:33:01 clients 10000 goroutines 20016 MEM: 271 MBConnection stats time 2026-05-15 22:33:06 clients 10000 goroutines 20016 MEM: 196 MBConnection stats time 2026-05-15 22:33:11 clients 10000 goroutines 20016 MEM: 292 MBConnection stats time 2026-05-15 22:33:16 clients 10000 goroutines 20016 MEM: 197 MBConnection stats time 2026-05-15 22:33:21 clients 10000 goroutines 20016 MEM: 318 MBConnection stats time 2026-05-15 22:33:26 clients 10000 goroutines 20016 MEM: 240 MBConnection stats time 2026-05-15 22:33:31 clients 10000 goroutines 20016 MEM: 353 MBConnection stats time 2026-05-15 22:33:36 clients 10000 goroutines 20016 MEM: 276 MBConnection stats time 2026-05-15 22:33:41 clients 10000 goroutines 20016 MEM: 196 MBConnection stats time 2026-05-15 22:33:46 clients 10000 goroutines 20016 MEM: 310 MBConnection stats time 2026-05-15 22:33:51 clients 10000 goroutines 20016 MEM: 222 MBConnection stats time 2026-05-15 22:33:56 clients 10000 goroutines 20016 MEM: 339 MBConnection stats time 2026-05-15 22:34:01 clients 10000 goroutines 20016 MEM: 259 MBConnection stats time 2026-05-15 22:34:06 clients 10000 goroutines 20016 MEM: 372 MBConnection stats time 2026-05-15 22:34:11 clients 10000 goroutines 20016 MEM: 234 MBConnection stats time 2026-05-15 22:34:16 clients 10000 goroutines 20016 MEM: 273 MBConnection stats time 2026-05-15 22:34:21 clients 10000 goroutines 20016 MEM: 379 MBConnection stats time 2026-05-15 22:34:26 clients 10000 goroutines 20016 MEM: 303 MBConnection stats time 2026-05-15 22:34:31 clients 10000 goroutines 20016 MEM: 226 MBConnection stats time 2026-05-15 22:34:36 clients 10000 goroutines 20016 MEM: 345 MBConnection stats time 2026-05-15 22:34:41 clients 10000 goroutines 20016 MEM: 273 MBConnection stats time 2026-05-15 22:34:46 clients 10000 goroutines 20016 MEM: 199 MBConnection stats time 2026-05-15 22:34:51 clients 10000 goroutines 20016 MEM: 295 MBConnection stats time 2026-05-15 22:34:56 clients 10000 goroutines 20016 MEM: 209 MBConnection stats time 2026-05-15 22:35:01 clients 10000 goroutines 20016 MEM: 307 MBConnection stats time 2026-05-15 22:35:06 clients 10000 goroutines 20016 MEM: 235 MBConnection stats time 2026-05-15 22:35:11 clients 10000 goroutines 20016 MEM: 335 MBConnection stats time 2026-05-15 22:35:16 clients 10000 goroutines 20016 MEM: 256 MBConnection stats time 2026-05-15 22:35:21 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:35:26 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:35:31 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:35:36 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:35:41 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:35:46 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:35:51 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:35:56 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:36:01 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:36:06 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:36:11 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:36:16 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:36:21 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:36:26 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:36:31 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:36:36 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:36:41 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:36:46 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:36:51 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:36:56 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:37:01 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:37:06 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:37:11 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:37:16 clients 0 goroutines 16 MEM: 376 MBConnection stats time 2026-05-15 22:37:21 clients 0 goroutines 16 MEM: 9 MBConnection stats time 2026-05-15 22:37:26 clients 0 goroutines 16 MEM: 9 MBConnection stats time 2026-05-15 22:37:31 clients 0 goroutines 16 MEM: 9 MBConnection stats time 2026-05-15 22:37:36 clients 0 goroutines 16 MEM: 9 MBConnection stats time 2026-05-15 22:37:41 clients 0 goroutines 16 MEM: 9 MBConnection 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.03P50: 147.10P90: 192.05P95: 210.76P99: 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 MBC10K Test Server starting on :8888Connection stats time 2026-05-15 22:48:09 clients 7398 goroutines 22401 MEM: 348 MBConnection stats time 2026-05-15 22:48:14 clients 10000 goroutines 30016 MEM: 695 MBConnection stats time 2026-05-15 22:48:19 clients 10000 goroutines 30016 MEM: 722 MBConnection stats time 2026-05-15 22:48:24 clients 10000 goroutines 30016 MEM: 680 MBConnection stats time 2026-05-15 22:48:29 clients 10000 goroutines 30016 MEM: 629 MBConnection stats time 2026-05-15 22:48:34 clients 10000 goroutines 30016 MEM: 581 MBConnection stats time 2026-05-15 22:48:39 clients 10000 goroutines 30016 MEM: 866 MBConnection stats time 2026-05-15 22:48:44 clients 10000 goroutines 30016 MEM: 701 MBConnection stats time 2026-05-15 22:48:49 clients 10000 goroutines 30016 MEM: 526 MBConnection stats time 2026-05-15 22:48:54 clients 10000 goroutines 30016 MEM: 818 MBConnection stats time 2026-05-15 22:48:59 clients 10000 goroutines 30016 MEM: 652 MBConnection stats time 2026-05-15 22:49:04 clients 10000 goroutines 30016 MEM: 481 MBConnection stats time 2026-05-15 22:49:09 clients 10000 goroutines 30016 MEM: 764 MBConnection stats time 2026-05-15 22:49:14 clients 10000 goroutines 30016 MEM: 599 MBConnection stats time 2026-05-15 22:49:19 clients 10000 goroutines 30016 MEM: 894 MBConnection stats time 2026-05-15 22:49:24 clients 10000 goroutines 30016 MEM: 709 MBConnection stats time 2026-05-15 22:49:29 clients 10000 goroutines 30016 MEM: 534 MBConnection stats time 2026-05-15 22:49:34 clients 10000 goroutines 30016 MEM: 835 MBConnection stats time 2026-05-15 22:49:39 clients 10000 goroutines 30016 MEM: 661 MBConnection stats time 2026-05-15 22:49:44 clients 10000 goroutines 30016 MEM: 495 MBConnection stats time 2026-05-15 22:49:49 clients 10000 goroutines 30016 MEM: 787 MBConnection stats time 2026-05-15 22:49:54 clients 10000 goroutines 30016 MEM: 618 MBConnection stats time 2026-05-15 22:49:59 clients 10000 goroutines 30016 MEM: 899 MBConnection stats time 2026-05-15 22:50:04 clients 10000 goroutines 30016 MEM: 723 MBConnection stats time 2026-05-15 22:50:09 clients 10000 goroutines 30016 MEM: 544 MBConnection stats time 2026-05-15 22:50:14 clients 10000 goroutines 30016 MEM: 830 MBConnection stats time 2026-05-15 22:50:19 clients 10000 goroutines 30016 MEM: 650 MBConnection stats time 2026-05-15 22:50:24 clients 10000 goroutines 30016 MEM: 488 MBConnection stats time 2026-05-15 22:50:29 clients 10000 goroutines 30016 MEM: 764 MBConnection stats time 2026-05-15 22:50:34 clients 10000 goroutines 30016 MEM: 581 MBConnection stats time 2026-05-15 22:50:39 clients 10000 goroutines 30016 MEM: 868 MBConnection stats time 2026-05-15 22:50:44 clients 10000 goroutines 30016 MEM: 711 MBConnection stats time 2026-05-15 22:50:49 clients 10000 goroutines 30016 MEM: 547 MBConnection stats time 2026-05-15 22:50:54 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:50:59 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:51:04 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:51:09 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:51:14 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:51:19 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:51:24 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:51:29 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:51:34 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:51:39 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:51:44 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:51:49 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:51:54 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:51:59 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:52:04 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:52:09 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:52:14 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:52:19 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:52:24 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:52:29 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:52:34 clients 0 goroutines 16 MEM: 842 MBConnection stats time 2026-05-15 22:52:39 clients 1 goroutines 18 MEM: 842 MBConnection stats time 2026-05-15 22:52:44 clients 1 goroutines 18 MEM: 842 MBConnection stats time 2026-05-15 22:52:49 clients 1 goroutines 18 MEM: 842 MBConnection stats time 2026-05-15 22:52:54 clients 1 goroutines 18 MEM: 14 MBConnection stats time 2026-05-15 22:52:59 clients 1 goroutines 18 MEM: 14 MBConnection stats time 2026-05-15 22:53:04 clients 0 goroutines 16 MEM: 14 MBConnection stats time 2026-05-15 22:53:09 clients 1 goroutines 18 MEM: 14 MBConnection stats time 2026-05-15 22:53:14 clients 1 goroutines 18 MEM: 14 MBConnection stats time 2026-05-15 22:53:19 clients 1 goroutines 18 MEM: 14 MBConnection stats time 2026-05-15 22:53:24 clients 0 goroutines 16 MEM: 14 MBConnection stats time 2026-05-15 22:53:29 clients 0 goroutines 16 MEM: 14 MBConnection stats time 2026-05-15 22:53:34 clients 0 goroutines 16 MEM: 14 MBConnection stats time 2026-05-15 22:53:39 clients 0 goroutines 16 MEM: 14 MBConnection 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.04P50: 152.84P90: 195.29P95: 214.30P99: 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 :8888Connection stats time 2026-05-15 22:56:57 clients 10000 goroutines 10016 MEM: 202 MBConnection stats time 2026-05-15 22:57:02 clients 10000 goroutines 10016 MEM: 310 MBConnection stats time 2026-05-15 22:57:07 clients 10000 goroutines 10016 MEM: 214 MBConnection stats time 2026-05-15 22:57:12 clients 10000 goroutines 10016 MEM: 325 MBConnection stats time 2026-05-15 22:57:17 clients 10000 goroutines 10016 MEM: 263 MBConnection stats time 2026-05-15 22:57:22 clients 10000 goroutines 10016 MEM: 187 MBConnection stats time 2026-05-15 22:57:27 clients 10000 goroutines 10016 MEM: 309 MBConnection stats time 2026-05-15 22:57:32 clients 10000 goroutines 10016 MEM: 235 MBConnection stats time 2026-05-15 22:57:37 clients 10000 goroutines 10016 MEM: 358 MBConnection stats time 2026-05-15 22:57:42 clients 10000 goroutines 10016 MEM: 290 MBConnection stats time 2026-05-15 22:57:47 clients 10000 goroutines 10016 MEM: 230 MBConnection stats time 2026-05-15 22:57:52 clients 10000 goroutines 10016 MEM: 359 MBConnection stats time 2026-05-15 22:57:57 clients 10000 goroutines 10016 MEM: 299 MBConnection stats time 2026-05-15 22:58:02 clients 10000 goroutines 10016 MEM: 236 MBConnection stats time 2026-05-15 22:58:07 clients 10000 goroutines 10016 MEM: 348 MBConnection stats time 2026-05-15 22:58:12 clients 10000 goroutines 10016 MEM: 273 MBConnection stats time 2026-05-15 22:58:17 clients 10000 goroutines 10016 MEM: 197 MBConnection stats time 2026-05-15 22:58:22 clients 10000 goroutines 10016 MEM: 318 MBConnection stats time 2026-05-15 22:58:27 clients 10000 goroutines 10016 MEM: 248 MBConnection stats time 2026-05-15 22:58:32 clients 10000 goroutines 10016 MEM: 193 MBConnection stats time 2026-05-15 22:58:37 clients 10000 goroutines 10016 MEM: 310 MBConnection stats time 2026-05-15 22:58:42 clients 10000 goroutines 10016 MEM: 241 MBConnection stats time 2026-05-15 22:58:47 clients 10000 goroutines 10016 MEM: 368 MBConnection stats time 2026-05-15 22:58:52 clients 10000 goroutines 10016 MEM: 297 MBConnection stats time 2026-05-15 22:58:57 clients 10000 goroutines 10016 MEM: 236 MBConnection stats time 2026-05-15 22:59:02 clients 10000 goroutines 10016 MEM: 287 MBConnection stats time 2026-05-15 22:59:07 clients 10000 goroutines 10016 MEM: 223 MBConnection stats time 2026-05-15 22:59:12 clients 10000 goroutines 10016 MEM: 336 MBConnection stats time 2026-05-15 22:59:17 clients 10000 goroutines 10016 MEM: 265 MBConnection stats time 2026-05-15 22:59:22 clients 10000 goroutines 10016 MEM: 200 MBConnection stats time 2026-05-15 22:59:27 clients 10000 goroutines 10016 MEM: 325 MBConnection stats time 2026-05-15 22:59:32 clients 9970 goroutines 9986 MEM: 261 MBConnection stats time 2026-05-15 22:59:37 clients 0 goroutines 16 MEM: 358 MBConnection stats time 2026-05-15 22:59:42 clients 1 goroutines 17 MEM: 358 MBConnection stats time 2026-05-15 22:59:47 clients 1 goroutines 17 MEM: 358 MBConnection stats time 2026-05-15 22:59:52 clients 1 goroutines 17 MEM: 358 MBConnection stats time 2026-05-15 22:59:57 clients 1 goroutines 17 MEM: 358 MBConnection stats time 2026-05-15 23:00:02 clients 1 goroutines 17 MEM: 358 MBConnection stats time 2026-05-15 23:00:07 clients 1 goroutines 17 MEM: 358 MBConnection stats time 2026-05-15 23:00:12 clients 1 goroutines 17 MEM: 358 MBConnection stats time 2026-05-15 23:00:17 clients 1 goroutines 17 MEM: 358 MBConnection stats time 2026-05-15 23:00:22 clients 2 goroutines 18 MEM: 358 MBConnection stats time 2026-05-15 23:00:27 clients 2 goroutines 18 MEM: 358 MBConnection stats time 2026-05-15 23:00:32 clients 2 goroutines 18 MEM: 358 MBConnection stats time 2026-05-15 23:00:37 clients 2 goroutines 18 MEM: 358 MBConnection stats time 2026-05-15 23:00:42 clients 1 goroutines 17 MEM: 358 MBConnection stats time 2026-05-15 23:00:47 clients 1 goroutines 17 MEM: 358 MBConnection stats time 2026-05-15 23:00:52 clients 2 goroutines 18 MEM: 358 MBConnection stats time 2026-05-15 23:00:57 clients 2 goroutines 18 MEM: 358 MBConnection stats time 2026-05-15 23:01:02 clients 2 goroutines 18 MEM: 358 MBConnection stats time 2026-05-15 23:01:07 clients 2 goroutines 18 MEM: 358 MBConnection stats time 2026-05-15 23:01:12 clients 2 goroutines 18 MEM: 358 MBConnection stats time 2026-05-15 23:01:17 clients 2 goroutines 18 MEM: 358 MBConnection stats time 2026-05-15 23:01:22 clients 1 goroutines 17 MEM: 358 MBConnection stats time 2026-05-15 23:01:27 clients 1 goroutines 17 MEM: 358 MBConnection stats time 2026-05-15 23:01:32 clients 1 goroutines 17 MEM: 358 MBConnection stats time 2026-05-15 23:01:37 clients 1 goroutines 17 MEM: 5 MBConnection 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.03P50: 146.74P90: 184.92P95: 200.10P99: 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 MC10K Test Server starting on :8888Connection stats time 2026-05-15 23:03:12 clients 10000 goroutines 20016 MEM: 539 MBConnection stats time 2026-05-15 23:03:17 clients 10000 goroutines 20016 MEM: 498 MBConnection stats time 2026-05-15 23:03:22 clients 10000 goroutines 20016 MEM: 459 MBConnection stats time 2026-05-15 23:03:27 clients 10000 goroutines 20016 MEM: 751 MBConnection stats time 2026-05-15 23:03:32 clients 10000 goroutines 20016 MEM: 710 MBConnection stats time 2026-05-15 23:03:37 clients 10000 goroutines 20016 MEM: 666 MBConnection stats time 2026-05-15 23:03:42 clients 10000 goroutines 20016 MEM: 516 MBConnection stats time 2026-05-15 23:03:47 clients 10000 goroutines 20016 MEM: 819 MBConnection stats time 2026-05-15 23:03:52 clients 10000 goroutines 20016 MEM: 663 MBConnection stats time 2026-05-15 23:03:57 clients 10000 goroutines 20016 MEM: 512 MBConnection stats time 2026-05-15 23:04:02 clients 10000 goroutines 20016 MEM: 805 MBConnection stats time 2026-05-15 23:04:07 clients 10000 goroutines 20016 MEM: 642 MBConnection stats time 2026-05-15 23:04:12 clients 10000 goroutines 20016 MEM: 476 MBConnection stats time 2026-05-15 23:04:17 clients 10000 goroutines 20016 MEM: 781 MBConnection stats time 2026-05-15 23:04:22 clients 10000 goroutines 20016 MEM: 617 MBConnection stats time 2026-05-15 23:04:27 clients 10000 goroutines 20016 MEM: 899 MBConnection stats time 2026-05-15 23:04:32 clients 10000 goroutines 20016 MEM: 739 MBConnection stats time 2026-05-15 23:04:37 clients 10000 goroutines 20016 MEM: 583 MBConnection stats time 2026-05-15 23:04:42 clients 10000 goroutines 20016 MEM: 879 MBConnection stats time 2026-05-15 23:04:47 clients 10000 goroutines 20016 MEM: 724 MBConnection stats time 2026-05-15 23:04:52 clients 10000 goroutines 20016 MEM: 576 MBConnection stats time 2026-05-15 23:04:57 clients 10000 goroutines 20016 MEM: 869 MBConnection stats time 2026-05-15 23:05:02 clients 10000 goroutines 20016 MEM: 717 MBConnection stats time 2026-05-15 23:05:07 clients 10000 goroutines 20016 MEM: 552 MBConnection stats time 2026-05-15 23:05:12 clients 10000 goroutines 20016 MEM: 853 MBConnection stats time 2026-05-15 23:05:17 clients 10000 goroutines 20016 MEM: 689 MBConnection stats time 2026-05-15 23:05:22 clients 10000 goroutines 20016 MEM: 533 MBConnection stats time 2026-05-15 23:05:27 clients 10000 goroutines 20016 MEM: 827 MBConnection stats time 2026-05-15 23:05:32 clients 10000 goroutines 20016 MEM: 665 MBConnection stats time 2026-05-15 23:05:37 clients 10000 goroutines 20016 MEM: 514 MBConnection stats time 2026-05-15 23:05:42 clients 10000 goroutines 20016 MEM: 818 MBConnection stats time 2026-05-15 23:05:47 clients 10000 goroutines 20016 MEM: 648 MBConnection stats time 2026-05-15 23:05:52 clients 9381 goroutines 18784 MEM: 482 MBConnection stats time 2026-05-15 23:05:57 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:06:02 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:06:07 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:06:12 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:06:17 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:06:22 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:06:27 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:06:32 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:06:37 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:06:42 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:06:47 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:06:52 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:06:57 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:07:02 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:07:07 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:07:12 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:07:17 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:07:22 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:07:27 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:07:32 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:07:37 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:07:42 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:07:47 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:07:52 clients 0 goroutines 16 MEM: 505 MBConnection stats time 2026-05-15 23:07:57 clients 0 goroutines 16 MEM: 9 MBConnection 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.04P50: 149.01P90: 194.76P95: 211.91P99: 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规则
@aceld
aceld merged commit a2cd618 into aceld:masterJun 6, 2026
1 check passed
Sign up for freeto 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.

2 participants

@redfox1999@aceld