java线程池动态调整_Java Executor,根据CPU和RAM使用情况调整线程池

我的应用程序使用Executor为大量任务提供线程池.我已经通过分析和基准测试确定,当每个核心有多个线程时,我的应用程序运行得最快.一个好的启发式方法是从每个核心4个线程开始,一直变化,直到你达到> 90%CPU或> 90%RAM.

是否有可以开箱即用的Executor?每个核心(不仅仅是一个)自动使用N个线程,或者理想情况下,根据CPU和RAM使用情况来限制线程池大小?

失败 – 如何以编程方式确定核心数?

解决方法:

更大的问题,imho,是如何衡量内存使用和CPU负载.内存使用很简单:

public double memUsageRatio() {

Runtime r = Runtime.getRuntime();

return (double) (r.totalMemory() - r.freeMemory()) / r.maxMemory();

}

对于CPU负载,它可能更成问题,具体取决于您运行的平台.在Linux上,您可以使用:

ManagementFactory.getOperatingSystemMXBean().getSystemLoadAverage();

这将返回最后一分钟的系统负载平均值.不幸的是,在Windows上,此方法始终返回-1.过去,我通过计算所有线程的CPU时间总和除以所有处理器的所有经过时间的总和,将其替换为给定时间间隔的系统负载平均值的近似值.这只是一个近似值,但在大多数情况下它的效果非常好:

import java.lang.management.*;

public class CPUUsageCollector implements Runnable {

private final static long INTERVAL = 1000

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值