Auf moderner, paralleler Hardware können nebenläufige Programme oft erhebliche Performancegewinne gegenüber Single-Core-Systemen erzielen. Die Parallelisierung von Programmen macht es jedoch nötig, Zugriffe auf gemeinsame Daten zu synchronisieren, was normalerweise mittels Locks erreicht wird. Dabei muss man sich oft zwischen einfacheren, aber weniger skalierbaren, und ausgefeilteren, aber fehleranfälligen Lock-Mechanismen entscheiden, was oft schwer ist. In solchen Fällen ist die Laufzeitanalyse von Lock-Belegungscharakteristiken (lock contention analysis) äußerst hilfreich. Wir präsentieren einen neuartigen, stichprobenbasierten Ansatz, um detaillierte Informationen über Lock Contention in Java-Applikationen zu sammeln. Die Analyse erlaubt uns, potentielle Nebenläufigkeitsprobleme zu erkennen, bei denen Threads unnötigerweise warten müssen. Unsere Implementierung basiert auf dem Java Virtual Machine Tool Interface (JVMTI) und auf Bytecode-Instrumentierung. Wir unterstützen sowohl Intrinsic Locks als auch java.util.concurrent Locks. Außerdem können wir nicht nur feststellen, wo Contention auftritt, sondern auch, wo sie verursacht wird. In Anbetracht eines durchschnittlichen Laufzeitmehraufwandes von etwa 5%, geringer Output-Datenmenge und einer hohen Genauigkeit ist unser Verfahren für den Einsatz in Produktionsumgebungen geeignet. |