线程被锁定在“www.protocol.http.httpurlconnection"

nxowjjhe  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(542)

我的线程在调用时被锁定

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 . 我还能做什么?
我敢肯定,人们一定面对过这个例外。
提前谢谢。

dzhpxtsq

dzhpxtsq1#

有没有可能你真的被困在了一个“connect()”的调用上?
您要查找的代码可能更接近:

HttpURLConnection connection = new URL(url).openConnection();
    connection.setConnectTimeout(10000);
    connection.setReadTimeout(10000);
    connection.connect();

这将创建连接对象,将其设置为10秒连接超时(尝试连接到远程主机)和10秒读取超时(等待响应的时间)。第一个可能需要更高,如果你在一个非常缓慢的网络。如果您的服务由于对某些资源的长时间操作而需要一段时间才能响应,那么第二个可能需要增加。在任何情况下,默认值都是无穷大,对于任何生产系统来说,这可能都不是一个好主意。

tkclm6bt

tkclm6bt2#

在堆栈跟踪中往上一点。您的应用程序可能正在打开与外部网站(例如springframework.org)的连接,以获取xsd。
查看这些网站是什么,并检查是否可以从使用wget部署应用程序的机器访问它们。

相关问题