Netty Flush 延迟

2022-10-11 16:09:49 +08:00
 daBig

writeAndFlush 后,handle 中只有编码工作没有耗时动作,延迟竟然达到 500ms, 期间 epollEventLoopGroup 线程没有作任何事情。 可能是什么原因呢,buffer 肯定也没满,难道 io 线程 hang 住了?

long writeTime = System.currentTimeMillis();

channel.writeAndFlush(message).addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { if (future.isSuccess()) { log.info("flush 延迟:{}",successTime - writeTime) } }); }

969 次点击
所在节点    程序员
4 条回复
wangyu17455
2022-10-11 16:53:21 +08:00
估计是网速慢,这个回调是你 flush 的东西完全写入 socket 缓冲区之后才会执行
daBig
2022-10-11 17:00:01 +08:00
@wangyu17455 我理解 flush 的耗时 是从用户空间拷贝到内核空间的时间吧 只有在缓冲区满的时候才会阻塞住,这个连接上 往前数 10 秒内没有写的动作,缓冲区应该不会满 如果 buffer 没满 是不是就和网速没啥关系了
wangyu17455
2022-10-11 17:04:58 +08:00
@daBig 这我就不知道为什么了,你把缓冲区调到比你 flush 的东西大试试
wangyu17455
2022-10-11 17:07:59 +08:00
或者你在每一个 handler 中间都插一个 loghandler 看耗时

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/886110

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX