Como resolver SocketException: Permissão negada: connect

2

Recentemente encontrei um problema que está me causando dor de cabeça e preciso de ajuda ...

O sistema consiste em dois subsistemas, chamados A e B, cada um sendo executado em uma instância independente do Tomcat e atualmente sendo executado na mesma máquina. A invoca o serviço de B via Spring httpInvoker (ou seja, sobre HTTP). O sistema B também invoca os serviços do outro sistema via HTTP.

Sintomas:

  1. o sistema começa a funcionar e parece funcionar normalmente por cerca de 10 a 15 dias;

  2. o sistema será executado por um período após uma exceção:

    org.springframework.remoting.RemoteAccessException: Could not access HTTP invoker remote service at [http://xxx.xxx.xxx.xxx/remoting/call]; 
    

    A exceção aninhada é

    java. net.SocketException: **Permission denied: connect**
    
  3. quando a exceção ocorre, o sistema continua. Isso acontece sempre, não apenas ocasionalmente. (Parece que alguns recursos estão esgotados, mas taxa de CPU < 5%, memória < 15%, rede < 5%).

  4. quando a chamada do sistema entre A e B falha, a chamada do sistema B sobre HTTP para um serviço externo também falhou, com a mesma exceção.

  5. Reiniciar os dois serviços do Tomcat faz todo o sistema funcionar corretamente.

Então, repetidamente seguindo as etapas de 1 a 5, não encontrei o motivo raiz.

Ambiente:

  • windows 2008 R2
  • tomcat7.0.42 x86_64
  • oralce-jdk-1.7.0_40

Alguma idéia?

    
por luxinxian 28.05.2014 / 03:53

1 resposta

1

Eu tive o mesmo problema com o RestTemplate. Eu mudei a inicialização para usar o HttpClient e consertei meu problema.

Aqui está a declaração da primavera que usei:

<code>
    <bean id="httpClient" class="org.apache.http.impl.client.DefaultHttpClient">
        <constructor-arg>
            <bean class="org.apache.http.impl.conn.PoolingClientConnectionManager"/>
        </constructor-arg>
    </bean>

    <bean id="restTemplate" class="org.springframework.web.client.RestTemplate" >
        <constructor-arg>
            <bean class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
                <constructor-arg ref="httpClient"/>
            </bean>
        </constructor-arg>
    </bean>
</code>

Isso resolveu completamente o problema (antes, depois de vários pedidos de http (cerca de 14500), tive o erro de "conectar".

    
por 19.08.2015 / 11:26