【问题标题】:Multi processor compilation of VS2015 produces "not enough quota is available to process this command" when running cl.exe运行 cl.exe 时,VS2015 的多处理器编译产生“没有足够的配额可用于处理此命令”
【发布时间】:2016-06-30 08:41:53
【问题描述】:

我们正在亚马逊服务器 (Windows Server 2012 R2) 上为一些 Visual Studio 解决方案运行自动化 Jenkins 构建。其中较大的项目配置了/MP,使用多处理器编译,尽量减少构建时间。

我们也运行带有/m 标志的msbuild

问题是几分钟后我们得到:

TRACKER:错误 TRK0002:无法执行命令:“C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\CL.exe”@C:\Users\Administrator\AppData\Local\Temp \tmpd19a7e5e426f4ec7baa597ed75516fd4.rsp”。没有足够的配额来处理这个命令。

此问题仅在运行 Jenkins 代理时出现。使用 Visual Studio IDE 一切都很好。从命令提示符运行 MSBuild 时,一切正常。

知道为什么会发生这种情况并且我们可以解决它吗?

跑步

WMIC CPU Get DeviceID,NumberOfCores,NumberOfLogicalProcessors
got
DeviceID  NumberOfCores  NumberOfLogicalProcessors
CPU0      2              4

也许 VS2015 没有正确检测有效处理器的数量,并跨越了一些同时产生过多进程的进程边界?

任何帮助将不胜感激。

【问题讨论】:

  • 亚马逊服务器,可能出了什么问题。您需要将“配额不足”理解为“您需要向我们支付更多的钱”。

标签: c++ windows visual-studio jenkins msbuild


【解决方案1】:

问题是在 WinRM 中定义了一个配额,如下所示:https://msdn.microsoft.com/en-us/library/ee309367(v=vs.85).aspx 我们将 MaxProcessesPerShell 的值更改为高于默认值 25,瞧。

【讨论】:

    【解决方案2】:

    technet 对“创建更多虚拟内存”的简单回答实际上可能值得一试。

    Jenkins,在它启动 MSBuild 时似乎使用 Runtime.exec()(如果您正在查看他们的代码,请查看 Launcher.java)。

    这通常会创建一个新进程,至少在最初,它与启动进程具有相同的内存占用。因此,在一段时间内,您运行的内存可能是构建过程所需内存的两倍。因此,在启动时拥有更多可用的虚拟内存可能足以让新进程运行足够长的时间以使启动进程完成并释放。

    这是 Technet 的 cough 对错误消息的有用描述:https://technet.microsoft.com/en-us/library/cc958981.aspx

    【讨论】:

    • 有问题的服务器有 8GB 的​​虚拟内存,绰绰有余。监控服务器内存占用并没有发现这方面的异常情况。看起来 Jenkins 代理在这些服务器上运行的方式(通过 WinRM)并不被配额王喜欢。
    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    相关资源
    最近更新 更多