从 net start 命令限制 Windows 服务 运行 使用的 CPU 核心数
Limit the number of CPU cores used by an Windows service running from net start command
我是 运行 Windows 10 上 PostgreSQL 12 的基准测试。我想限制 PostgreSQL 服务使用的 CPU 核心数来测试 CPU 性能影响 TPU。
现在我使用以下命令启动 PostgreSQL 服务:
net start postgresql-x64-12
而且我知道如何限制普通 Windows 应用程序的 CPU 核心数量,例如:
start /affinity 1 "" "C:\Windows\System32\calc.exe"
如何通过 net start 命令限制 Windows 服务 运行 使用的 CPU 核心数? net start
命令中是否有等效的 /affinity
选项?
我找到了解决办法。首先,您 不能 将 CPU 亲和力设置为 Windows 系统进程或服务(参见 https://www.atmarkit.co.jp/ait/articles/0703/16/news151.html(日语))。
在我的情况下,我可以从 cmd.exe 的 pg_ctl
命令 运行 PostgreSQL 进程和 /affinity
选项,例如:
cmd.exe /c "start /affinity 1F /B c:\path\to\PostgreSQL\bin\pg_ctl.exe start -w -s -D C:\path\to\PostgreSQL\data"
请注意,您不能像这样使用Start-Process
cmdlet 和ProcessorAffinity
属性:
$app = Start-Process 'c:\path\to\PostgreSQL\bin\pg_ctl.exe' 'start -D C:\path\to\PostgreSQL\data' -PassThru -NoNewWindow
$app.ProcessorAffinity = 0x3
这导致 SetValueInvocationException
因为 pg_ctl.exe
在启动 PostgreSQL 实例后立即退出。
我是 运行 Windows 10 上 PostgreSQL 12 的基准测试。我想限制 PostgreSQL 服务使用的 CPU 核心数来测试 CPU 性能影响 TPU。
现在我使用以下命令启动 PostgreSQL 服务:
net start postgresql-x64-12
而且我知道如何限制普通 Windows 应用程序的 CPU 核心数量,例如:
start /affinity 1 "" "C:\Windows\System32\calc.exe"
如何通过 net start 命令限制 Windows 服务 运行 使用的 CPU 核心数? net start
命令中是否有等效的 /affinity
选项?
我找到了解决办法。首先,您 不能 将 CPU 亲和力设置为 Windows 系统进程或服务(参见 https://www.atmarkit.co.jp/ait/articles/0703/16/news151.html(日语))。
在我的情况下,我可以从 cmd.exe 的 pg_ctl
命令 运行 PostgreSQL 进程和 /affinity
选项,例如:
cmd.exe /c "start /affinity 1F /B c:\path\to\PostgreSQL\bin\pg_ctl.exe start -w -s -D C:\path\to\PostgreSQL\data"
请注意,您不能像这样使用Start-Process
cmdlet 和ProcessorAffinity
属性:
$app = Start-Process 'c:\path\to\PostgreSQL\bin\pg_ctl.exe' 'start -D C:\path\to\PostgreSQL\data' -PassThru -NoNewWindow
$app.ProcessorAffinity = 0x3
这导致 SetValueInvocationException
因为 pg_ctl.exe
在启动 PostgreSQL 实例后立即退出。