如何允许 h2o 访问所有可用内存?

How to allow h2o to access all available memory?

我在 运行 内存为 64 GB 的 linux 服务器上通过 Rstudio Server 使用 运行 h2o。当我初始化集群时,它说集群总内存只有 9.78 GB。我已经尝试使用 max_mem_size 参数,但仍然只使用 9.78 GB。

localH2O <<- h2o.init(ip =  "localhost", port = 54321, nthreads = -1, max_mem_size = "25g")
H2O is not running yet, starting it now...
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
    Connection successful!
    R is connected to the H2O cluster: 
        H2O cluster uptime:         5 hours 10 minutes 
        H2O cluster version:        3.10.4.6 
        H2O cluster version age:    19 days  
        H2O cluster name:           H2O_started_from_R_miweis_mxv543 
        H2O cluster total nodes:    1 
        H2O cluster total memory:   9.78 GB 
        H2O cluster total cores:    16 
        H2O cluster allowed cores:  16 
        H2O cluster healthy:        TRUE 
        H2O Connection ip:          localhost 
        H2O Connection port:        54321 
        H2O Connection proxy:       NA 
        H2O Internal Security:      FALSE 
        R Version:                  R version 3.3.3 (2017-03-06) 

我运行服务器上的以下内容以确保可用内存量:

cat /proc/meminfo
MemTotal:       65806476 kB

编辑:

我正在深入研究这个问题,它似乎是 JVM 中的默认设置。当我直接在 Java 中启动 h2o 时,我能够传入命令 -Xmx32g 并且它确实增加了内存。然后我可以连接到 Rstudio 中的那个 h2o 实例并可以访问增加的内存。我想知道是否有办法在 JVM 中更改此默认值并允许更多内存,这样我就不必先从命令行启动 h2o 实例,然后从 Rstudio 服务器连接到它。

h2o R 包中的 max_mem_size 参数是函数式的,所以你可以用它来启动一个你想要的任何大小的 H2O 集群——你不需要不需要使用 -Xmx.

从命令行启动它

您的情况似乎是您正在连接到位于 localhost:54321 的现有 H2O 集群,该集群被限制为“10G”(实际上是 9.78 GB)。因此,当您从 R 运行 h2o.init() 时,它只会连接到现有集群(具有固定内存),而不是使用您在 max_mem_size 中指定的内存启动新的 H2O 集群,因此内存请求被忽略。

要修复,您应该执行以下操作之一:

  • localhost:54321 处终止现有的 H2O 集群并从具有所需内存要求的 R 重新启动,或者
  • 从 IP/port 不同于 IP/port 的 R 启动集群 已经运行宁。

启动时h2o.init()要指定参数min_mem_size=

这会强制 H2O 至少使用该数量的内存。 max_mem_size= 防止 H2O 使用超过该数量的内存。

如果您有 6GB(例如)可用内存,您可以这样做:

library(h2o)
h2o.init(max_mem_size = "6g")

示例:more memory