2016-06-30 2 views
0

Wir laufen automatisierte Jenkins Builds auf Amazon-Servern (Windows Server 2012 R2) für ein paar Visual Studio-Lösungen. Die größeren Projekte in ihnen sind mit der /MP konfiguriert, verwenden Multi-Prozessor-Kompilierung, versuchen, die Bauzeit zu minimieren.Multi-Prozessor-Kompilierung von VS2015 produziert "nicht genug Kontingent ist verfügbar, um diesen Befehl zu verarbeiten" beim Ausführen von cl.exe

Wir führen msbuild mit seiner /m Flagge auch.

Problem ist, dass nach wenigen Minuten erhalten wir:

TRACKER: Fehler TRK0002: Fehler Befehl auszuführen: "" C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ bin \ CL.exe "@C: \ Benutzer \ Administrator \ AppData \ Local \ Temp \ tmpd19a7e5e426f4ec7baa597ed75516fd4.rsp". Es ist nicht genug Kontingent verfügbar, um diesen Befehl zu verarbeiten.

Dieses Problem tritt nur auf, wenn Jenkins Agent ausgeführt wird. Mit Visual Studio IDE ist alles in Ordnung. Wenn MSBuild über die Eingabeaufforderung ausgeführt wird, ist auch alles in Ordnung.

Irgendeine Idee, warum das passiert und wir können es umgehen?

Lauf

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

Vielleicht ist VS2015 nicht die Anzahl der effektiven Prozessoren richtig erkennen und kreuzt einige Prozessgrenze von gleichzeitig zu viele Prozesse Laichen?

Jede Hilfe würde sehr geschätzt werden.

+0

Amazon Server, was könnte schief gehen. Sie müssen "nicht genug Kontingent" lesen, da Sie "mehr Geld bezahlen müssen". –

Antwort

0

Die einfache Antwort von Technet auf "mehr virtuellen Speicher erstellen" ist eigentlich eine Bash wert.

Jenkins, zu der Zeit es startet MSBuild scheint zu verwenden Runtime.exec() (Checkout Launcher.java, wenn Sie einen Blick auf ihren Code).

Dadurch wird normalerweise ein neuer Prozess erstellt, der - zumindest anfänglich - denselben Speicherbedarf wie der Startprozess hat. Für einen gewissen Zeitraum wird also wahrscheinlich doppelt so viel Speicher für den Build-Prozess benötigt. Wenn also zum Zeitpunkt des Starts mehr virtueller Speicher zur Verfügung steht, kann dies ausreichen, damit der neue Prozess so lange ausgeführt werden kann, dass der Startvorgang abgeschlossen und freigegeben werden kann.

Hier Husten nützliche Beschreibung der Fehlermeldung Technet: https://technet.microsoft.com/en-us/library/cc958981.aspx

+0

Die betreffenden Server haben 8 GB virtuellen Speicher, was mehr als genug ist. Bei der Überwachung des Speicherabstands des Servers wurden diesbezüglich keine Unregelmäßigkeiten festgestellt. Es scheint, dass die Art und Weise, wie Jenkins Agent auf diesen Servern läuft (über WinRM), vom Quoten-König nicht gemocht wird. –

Verwandte Themen