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颗。

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

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java线程池的参数设置包括corePoolSize(核心线程数)、queueCapacity(等待队列的长度)和maximumPoolSize(最大核心线程数)等。核心线程数是线程池中保持活动状态的线程数量,等待队列的长度是指可以容纳等待执行的任务数量,最大核心线程数是线程池中允许的最大线程数量。 在设置这些参数时,需要根据具体的应用场景和需求进行调整。如果任务量较小且响应时间要求较高,可以将核心线程数设置为较小的值,以减少线程的创建和销毁开销。如果任务量较大或者需要处理大量的并发请求,可以适当增加核心线程数和最大核心线程数,以提高线程池的并发处理能力。 等待队列的长度也需要根据任务的特点和系统的负载情况进行设置。如果任务量较大且任务执行时间较长,可以适当增加等待队列的长度,以避免任务被拒绝执行。如果任务量较小或者需要快速响应,可以将等待队列的长度设置为较小的值,以减少任务的等待时间。 最大核心线程数是线程池中允许的最大线程数量。当任务量超过核心线程数和等待队列的容量时,线程池会创建新的线程来处理任务,直到达到最大核心线程数。超过最大核心线程数的任务将被拒绝执行或者根据线程池的拒绝策略进行处理。 总之,Java线程池的参数设置需要根据具体的应用场景和需求进行调整,以提高程序的性能和并发处理能力。 #### 引用[.reference_title] - *1* [java线程池常用参数设置](https://blog.csdn.net/guanghuotainkong/article/details/115092944)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java多线程线程池的参数和配置](https://blog.csdn.net/MRZHQ/article/details/129107342)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [java线程池参数设置](https://blog.csdn.net/jerry_player/article/details/88293219)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值