如何在Windows机器上使用R检查系统内存是否可用?

jpd*_*527 6 memory windows r

我正在运行一个多线程的R程序,但由于主机系统内存不足而导致某些节点崩溃.在继续运行之前,每个节点是否有办法检查整个系统的可用内存?(机器正在运行Windows Server 2012 R2)

Lyz*_*deR 8

也许下面的一个将有所帮助(我也在Windows Server 2012 R2上):

也许这将是最有用的:

> system('systeminfo')
#the output is too big to show but you can save into a list and choose the rows you want
Run Code Online (Sandbox Code Playgroud)

或者只使用以下具体内存之一

> system('wmic MemoryChip get BankLabel, Capacity, MemoryType, TypeDetail, Speed')
BankLabel    Capacity    MemoryType  Speed  TypeDetail  
RAM slot #0  8589934592  2                  512         
RAM slot #1  4294967296  2                  512   
Run Code Online (Sandbox Code Playgroud)

可用内存:

> system('wmic OS get FreePhysicalMemory /Value')
FreePhysicalMemory=8044340
Run Code Online (Sandbox Code Playgroud)

总可用内存

> system('wmic OS get TotalVisibleMemorySize /Value')
TotalVisibleMemorySize=12582456
Run Code Online (Sandbox Code Playgroud)

基本上你甚至可以运行你想要的任何其他cmd命令,你知道它可以帮助你完成这个system功能.R将在屏幕上显示输出,然后您可以保存到data.frame并根据需要使用.

  • 这是完美的谢谢你.我做了一些输出更改,让它返回GB中的空闲内存.`as.numeric(gsub("\ r","",gsub("FreePhysicalMemory =","",system('wmic OS get FreePhysicalMemory/Value',intern = TRUE)[3]))/ 1024/1024 [1] 2.90044` (6认同)

H. *_*ena 6

只是为了完成,我在上面 Stefan 的回答中添加了对 Linux 的支持 - 在 Ubuntu 16 上测试

getFreeMemoryKB <- function() {
  osName <- Sys.info()[["sysname"]]
  if (osName == "Windows") {
    x <- system2("wmic", args =  "OS get FreePhysicalMemory /Value", stdout = TRUE)
    x <- x[grepl("FreePhysicalMemory", x)]
    x <- gsub("FreePhysicalMemory=", "", x, fixed = TRUE)
    x <- gsub("\r", "", x, fixed = TRUE)
    return(as.integer(x))
  } else if (osName == 'Linux') {
    x <- system2('free', args='-k', stdout=TRUE)
    x <- strsplit(x[2], " +")[[1]][4]
    return(as.integer(x))
  } else {
    stop("Only supported on Windows and Linux")
  }
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*n F 5

我将LyzandeR的答案包装在一个函数中,该函数返回以千字节(1024字节)为单位的物理内存。在Windows 7上测试。

get_free_ram <- function(){
  if(Sys.info()[["sysname"]] == "Windows"){
    x <- system2("wmic", args =  "OS get FreePhysicalMemory /Value", stdout = TRUE)
    x <- x[grepl("FreePhysicalMemory", x)]
    x <- gsub("FreePhysicalMemory=", "", x, fixed = TRUE)
    x <- gsub("\r", "", x, fixed = TRUE)
    as.integer(x)
  } else {
    stop("Only supported on Windows OS")
  }
}
Run Code Online (Sandbox Code Playgroud)