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