问题背景
在客户的pod内直接访问服务,发现有较大延迟,现象为偶发,其中测试的healthz接口没有业务逻辑,进程处理较快。
排查过程
添加-v后发现出现响应慢是,tcp连接建立没有问题: 客户配置net-exporter socketlatency之后,获取异常的pod的监控后发现出现read100ms现象很明显:
于此同时这个异常pod的rxqueue也在周期性大量堆积,说明伴随用户业务请求的处理过程,偶发行出现数据抓取慢导致的堆积,与其他正常pod对比,差距明显。
可以确认是用户程序去数据慢了,建议客户提供一下处理请求的代码进行分析,发现客户的代码中,请求处理采用串行方式。
引导客户查询本身请求处理的日志,发现异常pod单次请求有大量的超过3s的情况,但是正常处理的其他pod均为500ms左右。
根因原理
这个问题经分析排查,结论如下:
网络响应慢的根因是用户程序没有及时读取socket中就绪的数据导致,没有及时读取的原因是客户应用程序io模型与客户应用程序单次请求处理变慢两个原因叠加引发。