• java线程池大小_线程池大小设置多少合适?


    以前负责过一个物流项目,印象中服务器CPU是16核心,使用线程池来管理,最小线程数为8,核心线程数16,最大线程数32。

    主要是基于以下考虑:

    禁止使用 New Thread 方式去创建线程

    统一应用内线程池,并制定合适的核心线程和最大线程数量;

    编写公司库的时候,如需使用线程池,提供设置线程池的接口;

    懒加载尽量懒加载第三方库,避免过早的竞争系统资源。

    线程池设置其实没有非得一定怎么设置,只是原则上说,先区分什么类型的应用,cpu积极性的线程数量设置小一点,减少cpu切换,io密集型的线程池可以设置大一些,提高并发效率。线程池数量还要看链接对象的最大链接数限制,比如链接数据库的线程池,单机线程池最大还得受限于数据库的最大链接数。

    (最佳线程数 =CPU 核数 * [ 1 +(I/O 耗时 / CPU 耗时)];)

    如果要应对流量脉冲,除了最大最小线程数,还有几个比较影响性能的参数,比如testonborrow和testonreturn,这些开和关对性能影响很大,要求高性能就关了。最大线程数一般设置为cpu核数的整倍数,IO密集型:最佳线程数 = CPU核心数 * 2CPU密集型就设置为:最佳线程数 = CPU核心数 + 1。具体的设置都是经验压测后做调整的。

    假设一个案例:

    操作系统占用约1G内存空间;应用中间件占用内存1G ;应用中间件连接数估算值1000;每个并发连接占用10M;考虑服务器内存保留30%的冗余。则服务器的内存估算为:Mem=(1G+1GB+2000*10M)/(1-30%)=32GB,所以服务器选取32GB的服务器。

    系统并发用户数为1000人(U1);平均每个用户每分钟发出3次业务请求(N1);系统发出的业务请求中,更新、查询、其他各占1/3;平均每次更新业务产生4个事务(T1);平均每次查询业务产生4个事务(T2);平均每次其他业务产生8个事务(T3);一天内忙时的处理量为平均值的5倍;经验系数为1.6;(实际工程经验)考虑服务器保留30%的冗余;服务器需要的处理能力为:

    TPC-C=1000*3*(4+4+8)/3*5*1.6/0.7=182,857TPM

    服务器、级联服务器分别需要CPU32颗和16颗。

    算出事务数量,然后就可以考虑怎么设定线程池的数据量了。

  • 相关阅读:
    Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
    SpringBoot整合Shiro和加密
    defer 延迟调用【GO 基础】
    IDEA转换编码格式
    03_ElasticSearch下载安装
    黑客技术(网络安全)自学2024
    超越所有人的成就,牛顿的光芒也无法掩盖的天才数学巨人
    大数据库练习题
    架构基本概念和架构本质
    vue2自定义插件
  • 原文地址:https://blog.csdn.net/Odada1710/article/details/127930181