【发布时间】:2017-05-27 09:56:22
【问题描述】:
我们有一个单线程设计的计算要求高的 Java 程序(科学研究)。然而,在执行时,它加载了超过 1 个 CPU 内核(我们注意到这一点很困难——集群作业调度程序杀死了我们的程序,因为它加载了比请求更多的内核)。我们在 linux(Debian、Ubuntu)和 windows (7) 上都遇到过这种奇怪的现象。
我知道 java/jvm(垃圾收集器)添加了几个后台线程,因此即使是单线程程序也可以加载多个内核,但我怀疑这些后台进程是否可以加载另一个或两个完整的内核。
我想知道是什么原因造成的。感谢您的任何提示。如有任何细节,请随时询问,虽然我不能在这里发布代码(首先,它的代码相当多,其次,它仍在研究中,我还不能发布任何东西)。
【问题讨论】:
-
要求您发布所有代码是愚蠢的。但是,如果您获得一段运行计算的代码,它将有所帮助。此外,查看运行程序的 JVM 参数也很有用。
-
内存问题怎么办?当您在内存上执行大量操作并且在某些时候内存不足时,垃圾收集器可能会启动并大量使用 cpu。
-
请注意,由于优化,操作系统和 JVM 都可以选择要处理的内核数。递归和/或 GPU 呢?硬盘读取?