2009-09-08 5 views
8

Unsere Anwendung hat ~ 10 Threads, die getrennte Aufgaben erledigen (keine Thread-Pools). Wir erleben keinen Deadlock, versuchen aber immer, die Latenzzeit zu reduzieren, um auf eine Anfrage zu antworten, so dass wir daran interessiert sind, zu ermitteln, welche Locks am meisten umstritten sind. jconsole zeigt, wie oft Threads blockiert werden, und es ist nicht sehr oft, aber wir wollen immer noch wissen, welche Locks am meisten streiten.Ermittlung der am stärksten beanspruchten Sperren?

Wir verwenden die Sun JVM, daher ist JLA von IBM nicht nützlich und wir laufen nicht unter Solaris, so dass wir dTrace nicht verwenden können.

EDIT: Ich möchte diese Beobachtung in der Produktion machen, wo ein Profiler die App inakzeptabel verlangsamen würde. Dies ist ein Handelssystem, wenn wir langsam sind, verlieren wir Geld, also führen wir keine Profiler in der Produktion aus. Es ist auch ziemlich schwierig, den vielen Austausch zu simulieren, mit dem wir in einem Leistungstest sprechen.

+0

dTrace ist das einzige System, von dem ich persönlich weiß, dass es ohne Profiling-Tools funktioniert. – aperkins

+0

Wenn ich darüber nachdenke, empfinde ich die Instrumentierung als den besten Ansatz. Sie können entweder einzelne Sperranforderungen protokollieren oder globale Zähler behalten. –

Antwort

7

Holen Sie sich einen guten Profiler wie YourKit. Es kann Ihnen sagen, wie viel Zeit damit verbracht wird, auf bestimmte Methoden und Objektmonitore zu warten und zu blockieren. Zum Beispiel:

alt text http://i25.tinypic.com/j8ocbm.jpg


In Bezug auf Ihre Kommentare über Produktion Metriken, sind Sie ziemlich begrenzt, was Sie sammeln können. Die meisten Informationen erhalten Sie von der ThreadMXBean, die Ihnen Metadaten über alle laufenden Threads geben kann. Es gibt Ihnen jedoch keine Informationen über die Konkurrenz eines bestimmten Objektmonitors.

Ich möchte hier nicht auf meinen Elfenbeinturm steigen, aber ich glaube wirklich, dass es das Beste ist, wenn Sie versuchen, Ihre Produktionsumgebung so nah wie möglich zu reproduzieren. Wenn man etwas Zeit damit verbringt, sich jetzt einzurichten, wird sich das in der Zukunft um ein Vielfaches auszahlen.

Selbst wenn Sie einen Profiler mit einer simulierten, aber nicht ganz guten Umgebung ausführen, werden Sie wahrscheinlich gute Informationen erhalten.

+0

JProfiler hat ähnliche Funktionen. Aber ich möchte diese Beobachtung in der Produktion machen, wo ein Profiler die App inakzeptabel verlangsamen würde. Dies ist ein Handelssystem, wenn wir langsam sind, verlieren wir Geld, so dass wir Profiler in der Produktion nicht ausführen. Es ist auch ziemlich schwierig, die vielen Austauschvorgänge in einer Leistungstestumgebung zu simulieren. –

+0

@Ted, ich würde Ihre Frage bearbeiten, um diese Information hinzuzufügen, da sie dramatisch ändert, was Sie tun können und was nicht. – Kevin

+0

Danke Kevin, bearbeitet. Wir haben eine Performance-Test-Umgebung, die in der Vergangenheit sehr hilfreich war, aber ich denke, die meisten Hochfrequenz-Finanz-Shops haben entschieden, dass zu viel Zeit Simulieren der realen Welt nicht produktiv ist. Ich werde nach einem Handel suchen, wo wir einen Profiler in der Produktion ohne zu viel Schaden laufen lassen können. –

4

Für ein ähnliches Problem in der Datenbank, protokollieren wir eine Zeile kurz vor der Anforderung und sofort nach dem Erwerb einer Sperre. Wir melden uns auch nach der Freigabe. Wir verarbeiten diese Daten anschließend weiter, um die gesuchten Statistiken zu generieren.

EDIT: Auf einem entwickelten System könnte AspectJ eine gute Option sein, um die Protokolle zu generieren.

5

Ted, ich habe Verständnis für Ihre Situation, aber wenn die Leistung so wichtig ist, würde ich Ihnen empfehlen, in den sauren Apfel zu beißen und zu simulieren.

Es sollte nicht so schwer sein, wie Sie befürchten: Anstatt zu versuchen, Nachrichtenfluss von Ihren Börsen zu generieren, warum notieren Sie den eingehenden Fluss und wiederholen Sie ihn wieder in der Simulation?

Ohne etwas Ähnliches werden Sie immer auf das Heisenberg-Problem stoßen: Auswirkungen auf das System, das Sie messen.

Verwandte Themen