gpt4 book ai didi

java - jvm可以配置得体贴一些,与其他进程共享计算资源(CPU和RAM)吗?

转载 作者:行者123 更新时间:2023-12-02 03:30:48 24 4
gpt4 key购买 nike

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

那么我如何配置 jvm 使其表现得更像传统程序,只使用实际需要的内存和 CPU...

我知道以下标志,但是还有其他标志需要考虑吗?
-Xmx 限制最大内存
-XX:+UseSerialGC 禁用多线程垃圾收集

jvm真的可以单线程吗?

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

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

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

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

当以更高优先级连续启动新进程时,

nice +10 java 可能会遇到麻烦。ulimit java 可能导致 jvm 异常。

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

最佳答案

-XX:-UseSerialGC

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

I am working in an environment with no root access.

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

关于java - jvm可以配置得体贴一些,与其他进程共享计算资源(CPU和RAM)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38129883/

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