【问题标题】:Java/Tomcat Open TCP Connections - Resource MonitorJava/Tomcat 打开 TCP 连接 - 资源监视器
【发布时间】:2019-07-07 18:19:04
【问题描述】:

现在我们遇到了一个问题,我们的 Windows 服务器上有一堆“打开的 TCP 连接”,它们正在运行一个 tomcat 网络服务器。 Java 代码正在对供应商进行 SOAP 调用,我们在资源监视器(如下图所示)中看到许多打开的连接,显示供应商的 IP 地址。我尝试了几种不同的方法来进行 SOAP 调用,认为连接没有在幕后某处显式关闭。到目前为止没有任何效果,所以我想我可能误解了这个页面实际显示的内容。

与 Windows 资源监视器相关的 TCP 连接的生命周期是什么?不再使用的连接在那里停留一段时间是否正常?如果没有,我该如何补救?

【问题讨论】:

    标签: soap tomcat7 java-7 windows-server-2012 resource-monitor


    【解决方案1】:

    这可能是您的代码中的连接池或资源泄漏。

    为确保它不是资源泄漏,请检查您的代码以确保进行网络调用的任何对象在使用后关闭连接,否则您将等待垃圾收集器运行。

    但是,如果网络客户端支持连接池,那么关闭它可能只会将打开的连接放回池中,以便快速重用。你没有说你正在使用哪个客户端 API,但如果它支持池,那么它应该提供一个 API 来说明释放的连接在池中保留多长时间。

    没有 Windows Winsock 级别的池或持久性。如果底层的套接字被关闭,那么就是这样,它就会被关闭。

    【讨论】:

    • 客户端 API 只是我们的供应商托管的一个 SOAP Web 服务。我使用了几种不同的方法来连接它。最新的是使用javax.xml.soap.SOAPConnectionjavax.xml.soap.SOAPMessage 等。我在finally 块中使用soapConnection.close(); 明确关闭它。这个“调用”是由于我们托管的 Axis2 Web 服务而发生的。我们的内部应用程序调用服务,我们调用供应商。也许 Axis2 正在做一些事情来共享连接?
    • 不熟悉 Axis2,但它是一个 Apache 产品,因此可能会在幕后使用他们的 HttpClient。 HttpClient 绝对可以通过 HTTP/1.1 连接管理 SOAP 的连接池。也许有一种方法可以获取和自定义底层 HttpClient 及其连接管理器。
    猜你喜欢
    • 2014-03-22
    • 2021-12-24
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2021-02-14
    • 2011-12-12
    • 2021-01-17
    • 2017-05-22
    相关资源
    最近更新 更多