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

时间:2017-05-16 20:51:21

标签: r rstudio h2o rstudio-server

我在具有64 GB RAM的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服务器连接到它。

3 个答案:

答案 0 :(得分:1)

h2o R包中的max_mem_size参数功能正常,因此您可以使用它来启动您想要的任何大小的H2O群集 - 您不需要使用-Xmx从命令行启动它。

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

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

  • localhost:54321处杀死现有的H2O群集并从R重新启动并满足所需的内存要求,或
  • 从不同IP /端口的R启动集群,而不是那个集群 已经开始了。

答案 1 :(得分:1)

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

这迫使H2O使用至少那么多的内存。 max_mem_size=可以防止H2O使用超过该数量的内存。

答案 2 :(得分:0)

如果有6GB(例如)的可用内存,则可以执行以下操作:

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

示例:more memory