【问题标题】:Can jvm be configured to be considerate and share computing resources (CPU and RAM) with other processes?jvm能否配置为体贴,与其他进程共享计算资源(CPU和RAM)?
【发布时间】:2016-11-02 22:46:51
【问题描述】:

我正在运行用 Java 或 Scala 编写的现有程序。这些程序由不同的作者编写并且服务于非常不同的目的,因此将它们整合到一个大型程序中是不可行的。当这些 java 程序中的任何一个在具有许多内核(例如 32)和大量 RAM(例如 200G)的节点上启动时,每个程序都会尝试占用尽可能多的资源,以至于节点减速到停止并且没有有用的计算完成。例如,在不同的数据集上运行 32 个 Beagle 实例会导致 32 个 jvm 尝试使用 32 个内核和大部分内存。 (Beagle 未配置显式多线程,默认使用 nthreads=1。)

那么我该如何配置 jvm 使其表现得更像一个传统程序,只使用它真正需要的内存和 CPU...

我知道以下标志,但还有其他标志需要考虑吗? -Xmx limits maximum memory -XX:+UseSerialGC disables multithreaded garbage collection

jvm真的可以单线程吗?

此外,相当轻量级的 java 程序都试图在具有 200G RAM 的节点上使用至少 30G 的 RAM,而实际上它们只需要 -Xmx1G,这些程序运行时没有错误或明显的性能下降;事实上,启动时间要快得多。

有没有比设置内存上限更优雅的解决方案?如果我将-Xmx 设置得太低,程序就会崩溃。如果我将其设置得太高,则会浪费资源。使用由谨慎的作者编写的 C++ 编写的程序,我不需要调整这些东西。 C++ 程序的内存使用量通常会随着输入数据的大小而变化。

为什么 jvm 默认不能使用它实际需要的那么多?

除了niceulimit,还有更好的解决方案吗?

nice +10 java 在以更高优先级连续启动新进程时可能会遇到麻烦。 ulimit java 会导致 jvm 崩溃。

我在没有 root 访问权限的环境中工作。我不是在 Linux 服务器上工作,也不是在 Android 上工作。

【问题讨论】:

  • 我不知道,但android已经在进程之间共享RAM,我不知道这是否相关但可能是:)
  • 您可以使用 Beagle 的命令行选项 (nthreads) 来控制它。惊喜:阅读您使用的软件的文档会有所帮助。
  • @Durandal Beagle 的 nthread 默认为 1,因此默认情况下它应该在单线程中运行。其实我用的Beagle版本是不支持多线程的。我联系了作者关于 Beagle 接管所有内核的事情,他认为我使用的 Beagle 版本是严格单线程的。重要的是,我只以 Beagle 为例。其他程序的 CPU 使用率也可能超过 100%,这可能是由于多线程垃圾收集。部分问题是 jvm 在其他任务期间是否会多线程以及如何禁用它。
  • 它只使用它所需要的内存和 CPU。使用 -Xmx 只设置它在 OOME 死前将使用的最大内存。

标签: java memory jvm cpu-usage single-threaded


【解决方案1】:

jvm真的可以单线程吗?

不,当它可以同时运行时,它可以。您可以使用任务集将 JCVM 限制为仅一个 CPU 字节,如果您这样做,它将执行得非常糟糕,因为它确实需要多个 CPU。

有没有比设置内存上限更优雅的解决方案?

我会尝试确定您的意思。

为什么 jvm 不能使用它实际需要的那么多?

它确实根据需要使用尽可能多的 CPU 和内存。

nice +10 java 在不断启动新进程时可能会遇到麻烦

启动新的 JVM 所产生的开销远大于收益。如果你想节省 CPU,我会尽可能少地启动 JVM。

【讨论】:

    【解决方案2】:

    -XX:-UseSerialGC

    禁用串行 GC,这与您想要的相反。

    我在没有 root 访问权限的环境中工作。

    如果内核是使用用户命名空间编译的,您可以使用unshare 进入一个新的用户命名空间,然后在该命名空间中使用 cgroups 来限制资源。

    【讨论】:

    • 根据oracle.com/technetwork/articles/java/vmoptions-jsp-140102.html-XX:-UseSerialGC使用串行垃圾回收。
    • cgroups 选项很有趣(尽管我很确定我们使用的是股票内核)。它实际上与ulimit 不同吗?
    • 该表只描述了选项,选项是否打开和关闭由+/-决定。在表格上方的散文中提到:“布尔选项使用 -XX:+
    • 我明白了。我误解了表格。
    猜你喜欢
    • 2015-11-17
    • 2011-01-26
    • 2020-06-17
    • 1970-01-01
    • 2015-08-25
    • 2013-12-07
    • 2010-12-02
    • 1970-01-01
    • 2017-08-11
    相关资源
    最近更新 更多