2012-12-24 10 views
6

Ich verwende VisualVM, um zu sehen, wo meine Anwendung langsam ist. Aber es zeigt nicht alle Methoden an, zeigt wahrscheinlich nicht alle Methoden, die die Anwendung verzögern.Warum werden nicht alle Methoden im VisualVM-Profiler angezeigt?

Ich habe eine Echtzeitanwendung (Tonverarbeitung) und habe einen Zeitmangel in einigen hundert Mikrosekunden.

Ist es möglich, dass VisualVM Methoden versteckt, die selbst schnell sind?

UPDATE 1

I langsames Verfahren nach sampler gefunden und zu raten. Es war toString() Methode, die von Debug Logging aufgerufen wurde, die ausgeschaltet wurde, aber eine Zeit verbraucht.

Settings geholfen und jetzt weiß ich, wie man es sieht: es war abhängig von Start profiling from Option.

+0

Verwenden Sie den Sampler oder Profiler? Der Sampler, Brunnen Proben, in einem definierten Zeitintervall. Der Profiler ist genauer, aber viel langsamer. –

+0

Die Debug-Protokollierung sollte alle mit 'if (log.isDebugEnabled()) {' oder ähnlichem umgeben sein, um String-Verkettung und andere Dinge zu vermeiden, die in Ihren Protokollaufrufen stattfinden. –

+0

Siehe auch https://blogs.oracle.com/nbprofiler/entry/profiling_with_visualvm_part_1 und https://blogs.oracle.com/nbprofiler/entry/profiling_with_visualvm_part_2, um weitere Informationen zum Profiling und zum Festlegen von Profiling-Roots und Instrumentenfiltern zu erhalten. –

Antwort

5

Ich habe es im Moment nicht vor mir, aber bevor Sie mit der Profilerstellung beginnen, gibt es einen Einstellungsbereich, der standardmäßig ausgeblendet ist und Sie können Regexes für das Herausfiltern von Methoden eingeben. Standardmäßig werden viele JDK-Kernelemente herausgefiltert.

10

Anders als die Filter von Ryan Stewart erwähnt, hier sind ein paar weitere Gründe, warum Methoden nicht im Profiler angezeigt:

  • Sampling Profile sind von Natur aus stochastischen: eine Probe des aktuellen Stapel Alle Threads werden alle N ms genommen. Einige Methoden, die tatsächlich ausgeführt wurden, die aber während des Laufs nicht in einer Stichprobe erfasst wurden, werden nicht angezeigt. Dies ist in der Regel nicht zu problematisch, da die Tatsache, dass sie in keiner Stichprobe auftraten, bedeutet, dass es sich mit sehr hoher Wahrscheinlichkeit um Methoden handelt, die keinen großen Teil Ihrer Laufzeit beanspruchen.
  • Wenn Sie instrumentierungsbasiertes Sampling in Visualvm verwenden ("CPU-Profiling" genannt), müssen Sie den Einstiegspunkt für profilierte Methoden definieren (die Option "Profiling starten von"). Ich habe gefunden, dass dies für Methoden im Standardpaket fehlschlägt, und auch keine Zeit in Methoden aufnehmen, die gerade ausgeführt werden, wenn der Profiler angehängt ist (für die Dauer des aktuellen Aufrufs - es wird später Aufrufe erhalten. Dies liegt wahrscheinlich daran Die instrumentierte Methode wird erst nach Abschluss des aktuellen Aufrufs eingelagert
  • Die Stichprobenentnahme unterliegt einem potenziell schwerwiegenden Problem bei der Stapelprotokollierung, bei der nur an sicheren Punkten im Code Stichproben gezogen werden angefordert, wird jeder Thread an einen sicheren Punkt gezwungen, dann wird der Stack genommen In einigen Fällen haben Sie möglicherweise einen Hotspot in Ihrem Code, der keine sichere Punktabfrage durchführt (üblich für einfache Schleifen, die das JIT garantieren kann, nach einer festen Nummer zu beenden) von Iterationen), verschachtelt mit ein wenig Code, der eine Safepoint-Abfrage hat, Ihre Stacks zeigen Ihren Prozess immer im Safe-Point-Code, niemals im Safe-Poi nt freier Code, obwohl letzterer möglicherweise den Hauptteil der CPU-Zeit beansprucht.
+0

Warum würden die Schleifen keine sichere Punktabfrage durchführen? – Geek

+0

Zählbare Schleifen haben standardmäßig keine Sicherheitspunkte, um sie schnell zu halten. Siehe zum Beispiel diesen Fehler: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6869327 das Hinzufügen eines Flags um dieses Verhalten auszuschalten (aber es ist standardmäßig aktiviert). – BeeOnRope

+0

Können Sie auch versuchen, [diese Frage von mir] zu beantworten (http://stackoverflow.com/questions/17839933/what-are-safe-points-and-safe-point-polling-in-context-of-profiling? lq = 1), die als Ergebnis der Lektüre Ihrer Antwort war. – Geek

Verwandte Themen