• 请不要在回答技术问题时复制粘贴 AI 生成的内容
daBig
V2EX  ›  程序员

Netty Flush 延迟

  •  
  •   daBig · Oct 11, 2022 · 1855 views
    This topic created in 1313 days ago, the information mentioned may be changed or developed.

    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) } }); }

    wangyu17455
        1
    wangyu17455  
       Oct 11, 2022
    估计是网速慢,这个回调是你 flush 的东西完全写入 socket 缓冲区之后才会执行
    daBig
        2
    daBig  
    OP
       Oct 11, 2022
    @wangyu17455 我理解 flush 的耗时 是从用户空间拷贝到内核空间的时间吧 只有在缓冲区满的时候才会阻塞住,这个连接上 往前数 10 秒内没有写的动作,缓冲区应该不会满 如果 buffer 没满 是不是就和网速没啥关系了
    wangyu17455
        3
    wangyu17455  
       Oct 11, 2022 via Android
    @daBig 这我就不知道为什么了,你把缓冲区调到比你 flush 的东西大试试
    wangyu17455
        4
    wangyu17455  
       Oct 11, 2022 via Android
    或者你在每一个 handler 中间都插一个 loghandler 看耗时
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2830 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 15:26 · PVG 23:26 · LAX 08:26 · JFK 11:26
    ♥ Do have faith in what you're doing.