Назад | Перейти на главную страницу

Как решить SocketException: Permission denied: connect

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

Система состоит из двух подсистем, называемых 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, я не нашел первопричины.

Окружающая среда:

Любые идеи?

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

Вот объявление Spring, которое я использовал:

<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) у меня появлялась ошибка «подключиться».