【问题标题】:What will happen if I never call closeExpiredConnections with ThreadSafeClientConnManager如果我从不使用 ThreadSafeClientConnManager 调用 closeExpiredConnections 会发生什么
【发布时间】:2012-01-20 15:18:52
【问题描述】:

我在 java 应用程序中使用ThreadSafeClientConnManager 进行多线程处理。我的 ThreadSafeClientConnManager 对象是静态的,所以它会一直保持到应用程序运行为止。

如果我从不打电话给closeExpiredConnections()closeIdleConnections(),会发生什么?

从长远来看,它会导致我的应用程序崩溃吗?

【问题讨论】:

    标签: java multithreading httpclient


    【解决方案1】:

    以下假设您使用的是当前 GA 的 httpcmponents-client 4.1.2。

    从代码和 javadocs 来看,不会发生任何不好的事情。 ThreadSafeClientConnManager 有合理的限制。如果您没有向上更改限制,最终池将填满并且旧连接将被踢出。

    不利的一面是,您保留了空闲和过期的连接,其中包含不需要的资源(文件句柄)和对象。但同样,如果您没有更改默认值,这些资源的数量与可用资源相比是很小的:Linux 系统上总共 1000 个可用的文件句柄中有 20 个。

    简而言之:这不会导致应用崩溃。

    PS 这些库有可用的源代码,你应该自己看看结果是什么。

    【讨论】:

    • 你说的不对,我遇到了一种情况,投票中的所有连接都处于 CLOSE_WAIT 状态,并且没有创建新的连接。
    猜你喜欢
    • 2011-04-02
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2016-02-18
    相关资源
    最近更新 更多