4

我希望我的 vagrantfile 根据主机规格自动设置 CPU 和 RAM。

我发现了这个片段:

 config.vm.provider "virtualbox" do |v|
      host = RbConfig::CONFIG['host_os']
      # Give VM 1/4 system memory & access to all cpu cores on the host
      if host =~ /darwin/
        cpus = `sysctl -n hw.ncpu`.to_i
        # sysctl returns Bytes and we need to convert to MB
        mem = `sysctl -n hw.memsize`.to_i / 1024 / 1024 / 4
      elsif host =~ /linux/
        cpus = `nproc`.to_i
        # meminfo shows KB and we need to convert to MB
        mem = `grep 'MemTotal' /proc/meminfo | sed -e 's/MemTotal://' -e 's/ kB//'`.to_i / 1024 / 4
      else # sorry Windows folks, I can't help you
        cpus = 2
        mem = 1024
      end

      v.customize ["modifyvm", :id, "--memory", mem]
      v.customize ["modifyvm", :id, "--cpus", cpus]
end

但是,它不执行 Windows(而是设置默认值 2 和 1024)。

任何人都知道如何做到这一点?

4

3 回答 3

6

我设法将其视为我们的并将其集成到Git repo中。

编码:

cpus = `wmic cpu get NumberOfCores`.split("\n")[2].to_i
mem = `wmic OS get TotalVisibleMemorySize`.split("\n")[2].to_i / 1024 /4
于 2015-10-20T13:57:39.340 回答
3

要将上述答案统一为一个完整的示例,您的 vagrant 文件应包含此配置部分:

请注意mem_ratiocpu_exec_cap变量,您可以使用它们来调整要分配给 VM 的主机 RAM 和 CPU 周期的数量。

config.vm.provider "virtualbox" do |v|
  mem_ratio = 3/4
  cpu_exec_cap = 75
  host = RbConfig::CONFIG['host_os']
  # Give VM 3/4 system memory & access to all cpu cores on the host
  if host =~ /darwin/
    cpus = `sysctl -n hw.ncpu`.to_i
    # sysctl returns Bytes and we need to convert to MB
    mem = `sysctl -n hw.memsize`.to_i / 1024^2 * mem_ratio
  elsif host =~ /linux/
    cpus = `nproc`.to_i
    # meminfo shows KB and we need to convert to MB
    mem = `grep 'MemTotal' /proc/meminfo | sed -e 's/MemTotal://' -e 's/ kB//'`.to_i / 1024 * mem_ratio
  else # Windows folks
    cpus = `wmic cpu get NumberOfCores`.split("\n")[2].to_i
    mem = `wmic OS get TotalVisibleMemorySize`.split("\n")[2].to_i / 1024 * mem_ratio
  end

  puts "Provisioning VM with #{cpus} CPU's (at #{cpu_exec_cap}%) and #{mem/1024} GB RAM."

  v.customize ["modifyvm", :id, "--memory", mem]
  v.customize ["modifyvm", :id, "--cpus", cpus]

  v.customize ["modifyvm", :id, "--cpuexecutioncap", cpu_exec_cap]
end
于 2016-05-19T23:26:52.300 回答
1

它在您下载的脚本中:

抱歉,Windows 的人,我帮不了你

else # sorry Windows folks, I can't help you
    cpus = 2
    mem = 1024
  end

因此您可以更改这些默认值,但不幸的是 windows 不提供易于使用的命令来检索这些信息

现在如果你想自己做,应该是可以的,看看wmic命令,你可以得到很多,并且通过很少的解析你应该有必要的信息 - 例如

C:\Users\fhenri>wmic os get freephysicalmemory
FreePhysicalMemory
1564244

C:\Users\fhenri>wmic.exe cpu get NumberOfCores
NumberOfCores
1

你也可以看看systeminfo这是非常冗长且特定于语言环境的,因此可能更难以解析

于 2015-10-19T09:05:54.560 回答