如何允许 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
我在 运行 内存为 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