【问题标题】:MinEvictableIdleTimeMillis setting not working as expectedMinEvictableIdleTimeMillis 设置未按预期工作
【发布时间】:2020-08-18 10:27:44
【问题描述】:

我有这个对象池(使用 org.apache.commons.pool2),我从中借用(或创建)一个。

我设置的最大空闲大小为 3(最大大小为 5)。设置的前提是如果空闲对象超过 3 个,这些对象将被销毁 (BasePooledObjectFactory#destroyObject)

这在我的系统中的作用是创建和销毁多个对象,这很昂贵。我只希望它在空闲较长时间(比如 1 分钟)时被销毁。

我尝试设置 setMinEvictableIdleTimeMillis(我可以看到的默认值为 30 分钟)来执行此操作。默认值以及设置似乎都不起作用 - 我可以看到,当空闲计数超过 4 时,该对象经常被销毁。

为什么会发生这种情况?如何确保空闲对象不会被如此频繁地破坏?

【问题讨论】:

  • 未验证,因此仅作为评论:我认为您想要的是 minIdle = 3,maxIdle = maxTotal = 5。=> 无限期保留至少 3 个空闲对象,如果空闲更少则最多 5 个比 minEvictableIdleTime。

标签: java object-pooling apache-commons-pool


【解决方案1】:

仅使用minEvictableIdleTimeMillis 是不够的

您还必须指定 timeBetweenEvictionRunsMillis,默认为 -1。

池对象被验证/清理线程逐出,因此timeBetweenEvictionRunsMillis 将使该线程运行,因此它将检查理想线程的minEvictableIdleTimeMillis 并将它们逐出。

【讨论】:

    猜你喜欢
    • 2013-10-12
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2016-01-15
    相关资源
    最近更新 更多