- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个仅使用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/
我是一名优秀的程序员,十分优秀!