Hypercorn ASGI+Socket读取数据时,内存收集致传输速率下降问题
网络传输速率异常问题排查
问题场景
使用Hypercorn ASGI应用结合Socket(原测试采用requests API,后改用Socket+BufferedReader)分析网络传输速率时,发现将接收的数据存入内存列表chunks时,传输速率出现明显下降。
预期结果
无论是否将数据存入chunks变量,传输速率应保持一致。
实际结果
注释chunks.append(data)代码时,传输速率约为2.6Gbps;启用该代码后,速率降至1.4Gbps。
测试补充信息
- 机器内存超过1TB,流传输前创建20GB的dummy列表对速率无影响,但传输期间创建该列表会导致速率下降;
- 通过cProfile分析发现,速率正常时
BufferedReader调用recv_into的次数是速率下降时的10倍,怀疑是缓冲区大小发生了变化; - Line Profiler显示,启用
chunks.append(data)时,bufferedReader.read(ONE_MB)的耗时几乎翻倍; - 即使是向列表追加随机生成的1MB数据,
read操作的耗时依然很高;执行del data后,read耗时降低了50%。
内容的提问来源于stack exchange,提问作者Allen
相关产品推荐
相关产品推荐

