Multi-Core vs. Single-Core: Load Testing unter Linux
Java, Linux/OpenSource, ubuntuusers.de Juni 29th, 2013Inzwischen sind multi-core oder sogar multi-CPU Maschinen weit verbreitet. Um etwas besser abschätzen zu können, wie gut eine Anwendung mit steigender Anzahl von CPU (Kernen) skaliert, möchte man manchmal eine Anwendung auf einzelne Kerne oder sogar einen einzigen beschränken.
Auch fuer den Fall, dass man den selben Rechner als Test-Agent und zur Ausführung des Tests (also client und server) verwenden möchte, kann es sich lohnen die zu testende Anwendung und den Test-Agenten mit beschränkten Ressourcen zu starten, damit diese nicht so stark miteinander konkurrieren.
Unter Linux (Ubuntu, Debian, Arch…) gibt es das Utility „taskset“. Damit kann die CPU Affinität eines Prozesses beim start oder sogar nachträglich eingestellt werden.
Beispielsweise kann man damit dann eine Java Webanwendung folgendermaßen auf einen Core begrenzen:
taskset 1 [start-kommando]
In meinem Fall nutze ich jmeter um gegen eine so gestartete Anwendung zu testen:
env MAVEN_OPTS="$MAVEN_OPTS -noverify" taskset 1 mvn -Dspring.profiles.active=dev jetty:run
Schon beim Start bemerkt man recht deutlich, wie gut Java von Mehrprozessorarchitekturen profitiert. Selbst wenn die eigene Anwendung nicht stark parallelisert ist.
August 15th, 2013 at 21:23
> Schon beim Start bemerkt man recht deutlich, wie gut Java von Mehrprozessorarchitekturen profitiert.
Mehr*kern*prozessoren waren hier der entscheidende Durchbruch – mehrere CPUs sind dann eher für größere Anwendungen entscheidend. 🙂 Der Effekt ist übrigens insbesondere beim Einsatz von Application Servern und Servlet Containern jeglicher Art schnell zu spüren. Kein Wunder: WebContainer, DB Connection Pools, Scheduler wie Quartz etc. – das Getöse innerhalb einer solchen JVM ist oft schon ganz ordentlich, selbst wenn die Anwendung noch nicht mal multi-threaded konzipiert ist.