昨天出现一个生产问题。我们的channel系统代码里,调用其中一个三方服务商的http接口时未设置超时时间。碰巧昨天出现一笔http请求持续数小时始终无响应,加之程序是单线程处理交易请求,就出现因为线程一直处于RUNNABLE状态而导致系统生产能力严重下降。
现在说这个结论很easy,而昨天排查这个问题却很是花费了许多周折。
那么,解决这个问题,自然是为这个服务商的http请求设置合理的超时时间。
组内的小伙很快fix了这段代码,为方法里的http请求设置了connectTimeout和socketTimeout。
发现问题,上来就解决,往往是低效的方式。
为什么这么说呢?
曾经我们系统化地调整过channel里的对外http连接的超时时间。而怎么单单遗漏了这个服务商呢?原来,查看代码才发现,是这个服务商并没有依赖我们的公共的http util类,而是单独写的http post方法,藏匿得比较深。
consequently,once do,do it well。通过review代码后,我改成了让这个服务商也调用公共的http util来实现http通信。
标签:do,http,well,服务商,超时,once From: https://www.cnblogs.com/buguge/p/17307910.html