1.2017-12-21 所遇场景:在做百度识别的时候 在测试环境没有问题的代码部署到线上就出了问题,当时遇到的问题是
/** * 以字节流的方式读取图片 * [@param](https://my.oschina.net/u/2303379) path 图片路径 * [@return](https://my.oschina.net/u/556800) 图片字节流 * [@throws](https://my.oschina.net/throws) IOException * 时间 2017年12月12日 下午4:38:07 * [@author](https://my.oschina.net/arthor) sunjg * [@throws](https://my.oschina.net/throws) URISyntaxException */ private static byte[] readImageFile(String path) throws IOException, URISyntaxException { String str = java.net.URLDecoder.decode(path, "UTF-8"); URL uri = new URL(str); URLConnection connection =uri.openConnection(); InputStream inputStream =connection.getInputStream(); ByteArrayOutputStream outp = new ByteArrayOutputStream(); int ch = 0; while ((ch = inputStream.read()) != -1) outp.write(ch); byte[] b = outp.toByteArray(); return b; }
线上读取字节流文件的时候耗时太长,这个问题让我们非常苦恼,因为现在是上线时间,时间紧迫不然会造成延期。 所做的措施一:让运维在线上(online)环境上重新部署一下服务,我们猜想可能是因为代码没有提交完整,结果错误依旧,让然没有解决这个问题 所做的措施二:将代码中的异常处理都去除,将详细的堆栈信息都打印出来,根据日志信息进行处理问题,结果浏览器页面还是会出现504,请求超时问题 所做的措施三:线上某个图片地址 所获得信息如下图:
所做的措施四:在网上查了相关资料,并且问过技术总监,最终确定该问题属于DNS域名解析错误, 查了一下测试环境的DNS域名解析,结果为: DNS服务器地址配置 在Linux下面,有一个默认的DNS服务器地址配置文件的设置,存放在 /etc/resolv.conf
继续查找线上的该配置文件,结果如下:
将114.114.114.114配置到线上环境,结果一切正常了,该问题经过一波三折才解决了。