我们如何测试Apache Common pool逐出功能

时间:2017-03-01 01:50:33

标签: apache object-pooling

我正在尝试使用Apache公共池库来为在我的应用程序中创建昂贵的对象实现对象池。对于respource池,我使用库的GenericObjectPool类来使用API​​为对象池提供的默认实现。为了确保我们不会在内存中有多个空闲对象,我将minEvictableIdleTimeMillis和timeBetweenEvictionRunsMillis属性设置为30分钟。

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

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

1 个答案:

答案 0 :(得分:0)

  1. 图书馆在启用evictor时附带性能免责声明
  2.   

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

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

    但是,我们有一个高TPS系统,每1秒就会进行一次驱逐,而且我们看不到很多性能瓶颈。

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

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