wang_and_sheng
wang_and_sheng
**Describe the bug (描述bug)** src/brpc/socket.h中Socket类的Write实现过程存在内存暴增并限制不住的问题。 **To Reproduce (复现方法)** 1. 类似example/http_c++.cpp中的FileServiceImpl::SendLargeFile函数,http服务端使用CreateProgressiveAttachment创建ProgressiveAttachment进行Write写入数据。 2. 客户端curl访问,限制传输速度到一个低速,比如10KBps。 3. 服务端进程的内存使用会持续增加,并且无限制的增加。 问题原因: 1. ProgressiveAttachment::Write调用了Socket::Write。 2. Socket::Write函数逻辑如下  3. 判断当前socket写入是否overcrowded的标志是Socket::_overcrowded,根据Socket::WriteRequest::Setup进行判断标志上。  4. 但是Socket::WriteRequest::Setup的调用是在StartWrite里面  5. 造成这样一个问题,比如第一写入的IOBuf.size()超过了FLAGS_socket_max_unwritten_bytes,标志了_overcrowded=true, Socket::Write最终启动了KeepWrite bthread持续把IOBuf的内容写入socket...