结论先行:bcdedit /set和bcdedit /deletevalue 都需要重启生效
bcdedit /set parameter_name parameter_value
bcdedit /deletevalue parameter_name
truncatememory和removememory不要同时设置,微软建议设置removememory来达到缩减内存的目的
微软建议使用bcdedit命令来调节开机时的vCPU个数和内存大小,msconfig显示不准的问题提单给微软,微软承认是bug,目前不打算修,让用bcdedit命令来调节
下面3句命令执行后重启机器可复原开机时CPU、内存配置
bcdedit /deletevalue numproc
bcdedit /deletevalue truncatememory
bcdedit /deletevalue removememory
【powershell】
bcdedit /deletevalue numproc 2>$nul 1>$nul
bcdedit /deletevalue truncatememory 2>$nul 1>$nul
bcdedit /deletevalue removememory 2>$nul 1>$nul
【cmd】
bcdedit /deletevalue numproc 2>nul 1>nul
bcdedit /deletevalue truncatememory 2>nul 1>nul
bcdedit /deletevalue removememory 2>nul 1>nul
如果没有执行过bcdedit /set parameter_name parameter_value就执行bcdedit /deletevalue parameter_name会报错或者执行第1遍bcdedit /deletevalue parameter_name已经成功了又继续重复执行就会报错,所以命令加了输出重定向隐藏报错
bcdedit,用于调整机器开机启动参数(安全模式、bootmenu显示名称、CPU、内存等)
1、设置开机进入安全模式
参考https://cloud.tencent.com/developer/article/1917677
2、设置bootmenu显示名称
参考https://cloud.tencent.com/developer/article/1871412 尾部
3、设置开机vCPU最大个数
参考https://cloud.tencent.com/developer/article/1922477
bcdedit /set numproc <number>
设置开机时最大几个逻辑处理器(比如8vCPU你可以设置开机时用4个vCPU)
bcdedit /set numproc 4
执行下面命令进行复原
bcdedit /deletevalue numproc
4、设置开机最大内存
图形界面"msconfig命令 → 引导 → 高级选项 → 最大内存" 这个方式设置的开机最大内存重启后不一定就是设置的值,因为存在硬件保留内存。
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/devtest/boot-parameters-to-manipulate-memory
正如微软官方文档说的,由于removememory选项可以更有效地使用系统内存,因此建议使用它而不是truncatememory。
truncatememory或removememory选项在 Windows 7 及更高版本中可用。Truncatememory选项忽略指定物理地址或其上方的所有内存。removememory选项可按指定的量(以 MB 为单位)减少内存 。 这两个选项都可以减少内存,但在考虑内存间隙时,removememory选项会更好地限制操作系统使用指定的内存。
例如64G内存的机器,执行下面命令设置开机4G内存,实际进入系统发现开机后保留了61G内存,能被用到的只有3G内存
(这里有四舍五入的成分,实际情况是为硬件保留了61.xG,能被用到的是2.yG,x y=1)
bcdedit /set truncatememory 0x100000000
以上命令跟图形界面"msconfig命令 → 引导 → 高级选项 → 最大内存" 这个方式设置的效果一样(想可用4G,实际可用只有3G),但图形界面方式的单位是MB。
truncatememory 0x500000000,20480M,设置20G,实际19G
truncatememory 0x200000000,8192M,设置8G,实际7G
truncatememory 0x100000000,4096M,设置4G,实际3G
truncatememory 0x80000000,2048M,设置2G,实际2G
truncatememory 0x40000000,1024M,设置1G,实际1G
truncatememory 0x20000000,512M,设置0.5G,实际0.5G
执行下面命令进行复原
bcdedit /deletevalue truncatememory
用removememory也可以设置开机4G内存,以64G内存的机器为例,命令如下
#当n=64时,削减60G、设置开机最大4G内存,算法是:削减的内存=总内存-开机内存=1024*(n-4)=1024*60=61440
bcdedit /set removememory 61440
执行下面命令进行复原
bcdedit /deletevalue removememory
注意:
removememory和truncatememory的数字单位是不一样的
removememory是MB
truncatememory是Byte
truncatememory 和 removememory 不可同时使用
truncatememory 和 removememory 不可同时使用
truncatememory 和 removememory 不可同时使用
truncatememory 和 removememory 有个1GB的差异
64G内存的机器,设置开机20G内存、8G内存、4G内存、2G内存、1G内存、512M内存启动,命令如下
#当n=64时,削减44G、设置开机最大20G内存,算法是:削减的内存=1024*(n-20)=1024*44=45056
bcdedit /set removememory 45056
执行bcdedit /deletevalue removememory进行复原
#当n=64时,削减56G、设置开机最大8G内存,算法是:削减的内存=总内存-可用内存=1024*(n-8)=1024*56=57344
bcdedit /set removememory 57344
执行bcdedit /deletevalue removememory进行复原
#当n=64时,削减60G、设置开机最大4G内存,算法是:削减的内存=总内存-可用内存=1024*(n-4)=1024*60=61440
bcdedit /set removememory 61440
执行bcdedit /deletevalue removememory进行复原
#当n=64时,削减62G、设置开机最大2G内存,算法是:削减的内存=总内存-可用内存=1024*(n-2)=1024*62=63488
bcdedit /set removememory 63488
执行bcdedit /deletevalue removememory进行复原
#当n=64时,削减63G、设置开机最大1G内存,算法是:削减的内存=总内存-可用内存=1024*(n-1)=1024*63=64512
bcdedit /set removememory 64512
执行bcdedit /deletevalue removememory进行复原
#当n=64时,削减63.5G、设置开机最大0.5G内存,算法是:削减的内存=总内存-可用内存=1024*(n-0.5)=1024*63.5=65024
bcdedit /set removememory 65024
执行bcdedit /deletevalue removememory进行复原