2013-10-02 18 views
5

Wir machen gute Fortschritte beim Belastungstest und der Skalierung einer Akka-Anwendung, sehen aber, dass scala.concurrent.forkjoin.ForkJoinPool.scan() kommt als der zweithöchste Hotspot in Visualvm um 20% der eigenen Zeit. Die Spalte Eigenzeit (CPU) sagt nur einen Bruchteil davon aus (weniger als 1% des Wertes der Eigenzeitspalte).Akka - während des Belastungstests, forkjoinpool.scan bei 20% der CPU-Zeit

Ich vermute, das bedeutet Blockierung oder Kontextwechsel sind potentiell problematisch, aber ich bin mir nicht sicher - kann jemand Einblick geben? Wenn es Context-Switching ist, denke ich Tuning Dispatcher-Durchsatz auf eine höhere Anzahl kann uns Gewinne, sonst wenn es durch Blockieren verursacht wird, müssen wir den Code mehr lesen.

Jeder Einblick sehr geschätzt.

+1

Ich würde diesen Thread durchlesen, da er einige gute Einblicke in den Grund bietet, warum Sie möglicherweise viel mit dem FJP beschäftigt sind. Möglicherweise haben Sie tatsächlich einen Blockierungscode, der die Vorgänge verlangsamt, was dazu führt, dass die faulen FJP-Threads mehr als erwartet nach Arbeit suchen. https://groups.google.com/forum/m/#!topic/akka-user/6HKTvw4yBnU – cmbaxter

+0

Danke - dieser Thread hat mich davon überzeugt, dass es einige geparkte Threads geben muss - das und die Wanduhrzeit vs tatsächliche CPU verwendet. Dies ist eine hilfreiche Bestätigung +1 – JasonG

Antwort

8

Bei der Scan-Methode "parken" auch inaktive Threads im ForkJoinPool, wenn sie keine Arbeit finden können.

Mit 20% Eigenzeit und 1% davon als Selbst-CPU-Zeit denke ich, dass Sie im ForkJoinPool inaktive Threads haben, die dort geparkt haben.

Ich nehme an, dass Sie VisualVM im Sampling-Modus verwenden. Standardmäßig filtert VisualVM Dinge in der Standardbibliothek heraus. In dieser Antwort erfahren Sie, wie Sie die Einstellungen ändern und ein besseres Bild von den Vorgängen erhalten. https://stackoverflow.com/a/16113781/1688542

+0

Okay, das ist großartig - vielen Dank. Ich versuche es und melde mich zurück. – JasonG

+0

Ja tatsächlich - die Sonne aufdecken. * Zeigte sun.misc.Unsafe.park aß die CPU. – JasonG