如何解决 SocketException:权限被拒绝:连接

如何解决 SocketException:权限被拒绝:连接

我最近遇到了一个令我头疼的问题,需要帮助......

该系统由两个子系统组成,分别称为 A 和 B,每个子系统都运行在一个独立的 Tomcat 实例上,并且当前在同一台机器上运行。A 通过 Spring httpInvoker(即通过 HTTP)调用 B 的服务。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. 发生异常时,系统继续运行。这种情况总是发生,而不仅仅是偶尔发生。(看起来有些资源耗尽了,但 CPU 率 < 5%,内存 < 15%,网络 < 5%)。

  4. 当 A 和 B 之间的系统调用失败时,B 通过 HTTP 对外部服务的系统调用也会失败,并出现同样的异常。

  5. 重新启动两个 Tomcat 服务可以使整个系统正常运行。

于是反复按照步骤1-5,还是没有找到根本原因。

环境:

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

有任何想法吗?

答案1

我在使用 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 次)之后,我出现了有关“连接”的错误。

相关内容