【问题标题】:How to allow h2o to access all available memory?如何允许 h2o 访问所有可用内存?
【发布时间】:2017-10-16 02:52:09
【问题描述】:

我通过 Rstudio Server 在具有 64 GB RAM 的 linux 服务器上运行 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 服务器连接到它。

【问题讨论】:

    标签: r rstudio h2o rstudio-server


    【解决方案1】:

    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 重新启动所需的内存要求,或者
    • 从 R 在不同的 IP/端口上启动一个集群,而不是那个 已经在运行了。

    【讨论】:

    • 谢谢!是的,我似乎没有杀死我正在使用的端口上的 h2o 集群。首先杀死现有集群,然后使用 max_mem_size 再次初始化集群!谢谢你的帮助!我认为既然它说“h2o 还没有运行,现在开始......”意味着我正在启动一个新集群,但我应该通过查看集群正常运行时间知道它正在连接到现有集群。跨度>
    • 是的,它说“h2o 尚未运行,现在开始......”对我来说似乎也很奇怪。它不应该那样做,但它还应该打印出一堆启动消息,所以这有点奇怪。很高兴它修复了它!
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      示例:more memory

      【讨论】:

        猜你喜欢
        • 2021-05-18
        • 2020-04-15
        • 2021-12-06
        • 1970-01-01
        • 1970-01-01
        • 2013-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多