我的线程在调用
时被锁定new URL(url).openConnection();
线程转储的一部分是:
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
- locked <0x00000007056a2498> (a sun.net.www.protocol.http.HttpURLConnection)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
似乎被锁定在
"JakartaHttpHandler-http-timeout-pool-12-thread-1" daemon prio=10 tid=0x0000000046bb6800 nid=0x162 waiting on condition [0x00000000431b7000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000007521c68b8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
最后堆详情说,
compacting perm gen total 41408K, used 41295K [0x00000007fae00000, 0x00000007fd670000, 0x0000000800000000)
the space 41408K, 99% used [0x00000007fae00000, 0x00000007fd653e58, 0x00000007fd654000, 0x00000007fd670000)
线程不会在没有抛出任何异常的情况下继续进行。
首先,我打算更改-XX:MaxPermSize
。还有其他我可以做的事吗?
我相信,人们必须面对这个例外。
提前致谢。
答案 0 :(得分:0)
在堆栈跟踪中稍微向上一点。您的应用程序可能正在打开外部网站的连接,例如SpringFramework.org可能会获得XSD。
查看这些网站是什么,并检查是否可以使用wget从部署了应用程序的计算机访问这些网站。
答案 1 :(得分:0)
你是否有可能真的陷入“connect()”呼叫进一步向下?
您正在寻找的代码可能更接近:
HttpURLConnection connection = new URL(url).openConnection();
connection.setConnectTimeout(10000);
connection.setReadTimeout(10000);
connection.connect();
这将创建连接对象,将其设置为10秒连接超时(尝试建立与远程主机的连接)和10秒读取超时(等待响应所花费的时间)。如果你的网络很慢,第一个可能需要更高。如果由于对某些资源的长时间操作,您的服务需要一段时间才能响应,那么第二个可能需要被提升。在任何情况下,默认值都是无穷大,这可能不适合任何生产系统。