gpt4 book ai didi

Java多线程: program sporadically strats using more cores than a FixedThreadPool is allowed to

转载 作者:行者123 更新时间:2023-12-01 23:00:17 24 4
gpt4 key购买 nike

我有一个仅使用ExecutorService.newFixedThreadPool()的应用程序,并且一切都在我们的开发机器上运行良好(主要是多核Intel,在6核AMD上也运行良好)。但是,当我们在服务器(Opteron CPU,总共 64 个核心)上运行它并且线程池仅限于 4 个线程时,偶尔会发生一些奇怪的事情,并且程序开始使用 48 个核心。
除了一个主线程和这个 ExecutorService 之外什么都没有,它应该限制为 N 个线程,因此不应超过 N+1(main)+X(一些 java 服务) b> 线程,但绝对不是 48+。
非常感谢任何有关可能导致此行为的原因的建议。

我不会在这里发布任何代码,因为我们无法在除此服务器之外的任何其他环境中重现此代码,并且该代码没有什么特别的。它只是固定的线程池,Callables在其上批量运行(每批不超过线程池的大小),并在提交下一批任务之前从Futures收集结果。

最佳答案

看起来您正在使用并行垃圾收集器。参见这里:http://mail.openjdk.java.net/pipermail/hotspot-gc-dev/2009-January/000718.html

从这个答案来看,您似乎将有 40 个 GC 线程,加上您的应用程序线程。所以这可能就是正在发生的事情。

看看这个:http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html -- 特别是设置 XX:ParallelGCThreads=n

如果有帮助的话...我也遇到过同样的事情,除了容器监视器因过多的线程使用而杀死了我的进程。哦 HP-UX,我多么想念你。

关于Java多线程: program sporadically strats using more cores than a FixedThreadPool is allowed to,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23465039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com