Как решить SocketException: В доступе отказано: подключиться

Недавно я столкнулся с проблемой, которая вызывает у меня головную боль, и мне нужна помощь...

Система состоит из двух подсистем, называемых A и B, каждая из которых работает на отдельном экземпляре Tomcat и в настоящее время работает на одной машине. A вызывает сервис B через Spring httpInvoker (т.е. по HTTP). Система B также вызывает сервисы другой системы через HTTP.

Симптомы:

  1. система начинает работать и работает нормально в течение 10-15 дней;

  2. Система будет работать в течение определенного периода времени после исключения:

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

    Вложенное исключение

    java. net.SocketException: **Permission denied: connect**
    
  3. когда происходит исключение, система продолжает работу. Это происходит всегда, а не только изредка. (Похоже, что некоторые ресурсы исчерпаны, но частота процессора < 5%, память < 15%, сеть < 5%).

  4. когда происходит сбой системного вызова между A и B, системный вызов B через HTTP для внешней службы также завершился неудачей, с тем же исключением.

  5. Перезапуск обоих сервисов Tomcat обеспечивает правильную работу всей системы.

Таким образом, повторяя шаги 1 - 5, я не нашел основную причину.

Среда:

  • Windows 2008 R2
  • tomcat7.0.42 x86_64
  • Oralce-JDK 1.7.0_40-

Есть идеи?

1 ответ

У меня была такая же проблема с RestTemplate. Я изменил инициализацию, чтобы использовать HttpClient, и это решило мою проблему.

Вот весенняя декларация, которую я использовал:

<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>

Это полностью решило проблему (раньше, после ряда запросов http (около 14500) у меня была ошибка "connect").

Другие вопросы по тегам