问题描述
最近在生产上出现了多次java应用服务器挂死的情况。
问题分析
从堆栈中可以看到大量的线程挂在
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
通过查看代码,发现是通过HttpUrlConnection进行http请求的,并且有超时设置。如下所示:
HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
urlCon.setConnectTimeout(30000);
urlCon.setReadTimeout(30000);
通常情况下,阻塞在socket的write是比较少见的,也没有api可以专门设置写超时。看业务,主