
Ich verwende Hudson auf einem Windows 7-Rechner (x64): Dies wird einfach mit „java -jar hudson.war“ gestartet. Aus irgendeinem Grund verwendet der Java-Prozess nur eine von zwei verfügbaren CPUs, obwohl er mehrere Threads ausführt. Ich bin ziemlich sicher, dass das Standardverhalten des Betriebssystems darin besteht, die Threads eines Multithread-Programms auf mehrere CPUs zu verteilen, sofern nicht ausdrücklich etwas anderes angegeben wird (mithilfe einer SetProcessorAffinity-API, wenn ich mich richtig erinnere).
Gibt es eine Möglichkeit, Java anzuweisen, mehrere CPUs zu verwenden?
Antwort1
Normalerweise java.exe
werden Threads automatisch auf verschiedene CPUs verteilt.
Ist dies nicht der Fall, liegt dies möglicherweise daran, dass das Programm E/A-gebunden und nicht CPU-gebunden ist oder dass die Threads aufgrund der Synchronisierung nicht gleichzeitig ausgeführt werden können.
Sehenhttp://www.oracle.com/technetwork/java/hotspotfaq-138619.html#perf_scalingfür weitere Informationen.
Sie müssen Hudson wahrscheinlich debuggen, um herauszufinden, warum nur ein Prozessor verwendet wird.