2012-08-24 3 views
1

Mes fils sont bloqués tout en appelant seDiscussion verrouillée à se « www.protocol.http.HttpURLConnection »

new URL(url).openConnection(); 

Une partie de décharge de fil est:

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) 

qui semble bloqué à

Dans les détails du tas fin disent,

compacting perm gen total 41408K, used 41295K [0x00000007fae00000, 0x00000007fd670000, 0x0000000800000000) 
    the space 41408K, 99% used [0x00000007fae00000, 0x00000007fd653e58, 0x00000007fd654000, 0x00000007fd670000) 

Les threads ne peuvent pas continuer sans exception.

Premièrement, je prévois de changer le -XX:MaxPermSize. Y a-t-il autre chose que je puisse faire? Je suis sûr que les gens ont dû faire face à cette exception.

Merci d'avance.

Répondre

0

Remonte un peu dans la trace de la pile. Votre application ouvre probablement une connexion à un site externe comme par exemple SpringFramework.org pour obtenir éventuellement des XSD.

Vérifiez ce que sont ces sites Web et vérifiez s'ils sont accessibles à partir de la machine sur laquelle votre application est déployée à l'aide de wget.

+1

Ne devrait-il pas être dépassé dans ce cas? Le fil est juste coincé. – instanceOfObject

0

Est-il possible que vous soyez réellement bloqué lors d'un appel "connect()" plus bas?

Le code que vous cherchez est probablement plus proche:

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

Cela va créer l'objet de connexion, réglez-le sur un 10s connecter délai d'attente (en essayant d'établir une connexion à l'hôte distant) et 10s timeout de lecture (le temps qu'il peut passer à attendre une réponse). Le premier pourrait éventuellement être plus élevé si vous êtes sur un réseau très lent. La seconde pourrait devoir être augmentée si votre service prend un certain temps pour répondre en raison de longues opérations sur certaines ressources. Dans tous les cas, la valeur par défaut est l'infini et ce n'est probablement pas une bonne idée pour un système de production.