【问题标题】:How we can test the Apache Common pool evict functionality我们如何测试 Apache Common pool evict 功能
【发布时间】:2017-03-01 01:50:32
【问题描述】:

我正在尝试使用 Apache 通用池库来为在我的应用程序中创建成本高昂的对象实现对象池。对于资源池,我使用了库的 GenericObjectPool 类来使用 API 为对象池提供的默认实现。为了确保我们最终不会在内存中出现多个空闲对象,我将 minEvictableIdleTimeMillis 和 timeBetweenEvictionRunsMillis 属性设置为 30 分钟。

据我从其他问题、博客和 API 文档中了解到,这些属性会触发一个单独的线程,以便从池中逐出空闲对象。

如果这对应用程序性能有任何不利影响,以及是否有任何方法可以测试该线程是否实际执行,有人可以帮助我吗?

【问题讨论】:

    标签: apache object-pooling


    【解决方案1】:
    1. 启用 evictor 时库附带性能免责声明

    逐出运行与客户端线程竞争访问池中的对象,因此如果它们运行过于频繁,可能会导致性能问题。

    参考:https://commons.apache.org/proper/commons-pool/api-1.6/org/apache/commons/pool/impl/GenericObjectPool.html

    但是,我们有一个每 1 秒运行一次驱逐的高 TPS 系统,我们没有看到太多的性能瓶颈。

    1. 至于驱逐线程的运行,您可以在您的 GenericObjectPool 实现中覆盖 evict() 方法并添加一条日志行。

      @Override
      public void evict() throws Exception {
         //log
         super.evict();
      }
      

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 2013-04-15
      • 1970-01-01
      • 2021-09-12
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多