Vagrant - 如何检测 windows 主机 RAM 和 CPU
Vagrant - how to detect windows host RAM and CPU
我希望我的 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)。
有人知道怎么做吗?
它在您下载的脚本中:
对不起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
这非常冗长且特定于区域设置,因此可能更难解析
我设法将其计算出来并将其集成到 Git repo。
代码:
cpus = `wmic cpu get NumberOfCores`.split("\n")[2].to_i
mem = `wmic OS get TotalVisibleMemorySize`.split("\n")[2].to_i / 1024 /4
为了将上述答案统一为一个完整的示例,您的 vagrant 文件应包含此配置部分:
请注意 mem_ratio
和 cpu_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
我希望我的 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)。
有人知道怎么做吗?
它在您下载的脚本中:
对不起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
这非常冗长且特定于区域设置,因此可能更难解析
我设法将其计算出来并将其集成到 Git repo。
代码:
cpus = `wmic cpu get NumberOfCores`.split("\n")[2].to_i
mem = `wmic OS get TotalVisibleMemorySize`.split("\n")[2].to_i / 1024 /4
为了将上述答案统一为一个完整的示例,您的 vagrant 文件应包含此配置部分:
请注意 mem_ratio
和 cpu_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