`
freeheron
  • 浏览: 68180 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

common pool 导致CPU高

    博客分类:
  • Java
阅读更多

有个应用的CPU使用率很高,有时到100%,因为这个原因,产生连锁反应,最终系统宕掉。

检查应用的源码,发现其中使用了开源的common pool的对象池来管理对象。以前就知道这个开源包有些问题,但是看其中的使用,应该没有什么问题。自己也做了大量的实验也没有重现CPU高的问题。

再仔细分析找个应用发现一个特别的情况,pool的大小是1000,而访问这个pool的线程甚至能到达4000。(这么多线程,应用本身的设计就不合理)。这是一个发现,做个实验,果然:当pool的最大对象数小于访问pool的线程数量时,CPU急剧上升。由通常情况的5%左右上升到70%。好可怕^_^。还好我几乎不用这个,现在JDK中好用的东西太多了。

 

而且在多并发应用中,最好还是不用对象池:

“当线程分配新的对象时,需要线程内部的协调,分配运算常使用线程本地的分配块来消除同步。当线程从池中请求对象,协调访问池的同步是必须的,这时就有线程阻塞的可能。由锁竞争产生的阻塞,其代价可能比直接分配多几百倍。”

来自专家的建议^_^。

0
0
分享到:
评论

相关推荐

    CommonPool2Demo

    Apache Commons Pool2是一个流行的开源库,专门用于实现对象池。本篇将详细介绍Commons Pool2的基本概念、核心组件以及如何通过`CommonPoolDemo22`这个示例代码来理解和应用它。 Apache Commons Pool2提供了可扩展...

    common-pool2

    `common-pool2`是Apache Commons Pool的第二个主要版本,它提供了对对象池的实现,允许开发者高效地管理和重用对象,避免频繁创建和销毁对象带来的开销。这个库不仅适用于Jedis,还可以应用于任何需要池化对象的场景...

    redis3.2+jedis2.8.jar+common-pool2.jar+common-pool2-source.rar

    Redis是一款高性能的键值对数据库,常用于缓存、消息队列等场景。它支持丰富的数据类型,如字符串、哈希、列表、集合、有序集合等,提供了丰富的操作命令,使得在内存中处理数据非常高效。Redis3.2是其稳定版本之一...

    通过Apache common pool开源包实现对象池

    下面通过一个简单的样例来说明如何利用apache common pool来应用对象池。 假定我现在有一个任务,就是对一堆字符串进行格式化,为了加快速度,采用了多线程的方式允许,而格式化则是通过对象StringFormat来实现。 ...

    apache common pool2 实例

    Apache Commons Pool2 是一个高效的对象池库,它允许开发者创建并管理对象池,以提高程序性能,特别是对于那些创建和销毁成本较高的对象。在Java应用中,对象池化是一种常用的优化策略,它通过复用已经创建的对象来...

    common-pool的eclipse源码+例子

    common-pool的eclipse源码+例子,可以直接导入到eclipse中运行,例子的代码放在src/main/java mh.test中,注意eclipse的jre版本不要用1.8,那样会出现duplicate method的错误!

    Apache common pool2 对象池

    这些策略可以帮助确保池中的对象始终处于良好的工作状态,防止因长时间未使用的对象导致的问题。 - **驱逐策略**:允许设置一个条件,如果对象满足该条件,就会被从池中移除。这通常与`TestOnIdle`一起使用,当对象...

    Jedis-Common-Pool

    标题中的“Jedis-Common-Pool”指的是Jedis,一个流行的Java客户端库,用于与Redis内存数据存储系统交互,以及Apache Commons Pool 2,这是一个对象池实现,Jedis使用它来管理Redis连接的生命周期,提高性能和资源...

    jedis 和 common-pool

    标题中的“jedis”和“common-pool”指的是在Java开发中常用的两个库,它们分别是Jedis和Apache Commons Pool。Jedis是专为处理Redis数据存储服务而设计的一个Java客户端,而Apache Commons Pool则是一个通用的对象...

    最新连接redis数据库连接池commons-pool-2.5.0

    需要使用Redis连接池的话,还需commons-pool包,提供了强大的功能,包含最新的jar包

    common-dbcp.jar,common-pool.jar,common-collections.jar

    commons-dbcp-1.4 jar java连接池. .commons-dbcp 是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要3个包:

    commons-pool2-2.5.0-API文档-中英对照版.zip

    赠送jar包:commons-pool2-2.5.0.jar; 赠送原API文档:commons-pool2-2.5.0-javadoc.jar; 赠送源代码:commons-pool2-2.5.0-sources.jar; 包含翻译后的API文档:commons-pool2-2.5.0-javadoc-API文档-中文...

    commons-pool2-2.0-API文档-中文版.zip

    赠送jar包:commons-pool2-2.0.jar; 赠送原API文档:commons-pool2-2.0-javadoc.jar; 赠送源代码:commons-pool2-2.0-sources.jar; 赠送Maven依赖信息文件:commons-pool2-2.0.pom; 包含翻译后的API文档:...

    commons-pool-1.5.1

    commons-pool-1.5.1........................

    jedis2.9-common-pool

    《Jedis 2.9与Common Pool:Redis客户端与连接池详解》 Redis,作为一款高性能的Key-Value存储系统,被广泛应用于缓存、消息队列等多种场景。在Java开发中,Jedis是一个非常流行的Redis客户端库,而Jedis 2.9版本则...

    commons-pool2-2.8.1.jar

    这些特性使得Apache Commons Pool 2 能够满足复杂的应用场景,比如在高并发环境下有效地管理和复用资源。 在使用Apache Commons Pool 2 的过程中,需要注意的是,虽然对象池化可以提高性能,但过度使用或不恰当配置...

    jedispool连redis高并发卡死的问题

    jedispool是基于apache common pool实现的连接池,它将连接Redis服务器的操作抽象成了一个池子,池子中可以容纳多个连接对象。客户端可以从池子中获取连接对象,执行操作后再返还给池子。jedispool提供了许多配置...

    commons-pool1.5.2 jar包+源码

    这种策略减少了创建和销毁对象的次数,提高了系统的性能,尤其是在创建对象成本较高的情况下。 **Apache Commons Pool 1.5.2** Apache Commons Pool 1.5.2是Apache软件基金会开发的一个Java对象池实现。它提供了...

    commons-pool2-2.11.1-bin.zip

    DBCP(DataBase Connection Pool)是 apache common上的一个 java 连接池项目,也是 tomcat 使用的连接池组件,依赖 于Jakarta commons-pool 对象池机制,DBCP可以直接的在应用程序中使用。 使用DBCP会用到commons-...

Global site tag (gtag.js) - Google Analytics