在一次联调中发现,NDK在不停打印”TCP: Keep Timeout”。在高吞吐的系统负载下,打印会大大降低系统性能,造成丢包、高延迟等后果。
为了解决这一问题,首先要确认该打印的原因。然后再想办法减少打印。
打印原因是TCP有保活定时器,当超时时会触发这条消息。当一条TCP连接建立后,当一段时间连接上没有收发数据时,TCP会发送保活消息。NDK的默认设置是线路静默2小时后开始发起保活,每隔75秒发送一次,连续10分钟无响应时断开该连接。
从NDK源码中搜索,马上找到了这条打印的代码:
========== stack/tcp/tcptime.c 109 109 ============
DbgPrintf(DBG_INFO,"TCP: Keep Timeout");
发现这是一条DBG_INFO级别的打印。NDK有四种不同的打印级别,分别对应于不同的信息级别。在源码中可以找到。
========== inc/os/osif.h 294 297 ===&#