某天在查询生产日志时,发现大量的Okhttp连接泄漏警告日志,但生产上没有收到任何异常反馈。出于好奇心,本地最小化复现问题,并最终解决问题。
okhttp官网的demo示例
OkHttpClient client = new OkHttpClient();String run(String url) throws IOException {Request request = new Request.Builder().url(url).build();try (Response response = client.newCall(request).execute()) {return response.body().string();}
}
1.1 上述示例明显是Try-with-resources写法,最终会在finally里去关闭资源
1.2 跟进string()源码发现最终也会关闭资源
分析官网示例,连接泄漏可能是因为执行请求没有关闭资源并且也没有执行string方法,导致资源始终没有关闭
2.1 上面示例在响应成功时就不会关闭连接资源
下一篇:css的三种引入方式