2015-07-14 10 views
5

Ich verwende gocraft/web in einem Projekt und versuche, einige hohe Speicherauslastung zu debuggen. gocraft/web verwendet Reflektion, um Handler anzurufen. Ich habe den net/http/pprof Profiler eingerichtet, der sehr gut funktioniert, aber der größte Block des Speichers, und der, in dem ich iterested bin, zeigt nur reflect.Value.call als die Funktion an. Das ist nicht sehr hilfreich.GoLang - Gibt es eine Möglichkeit, die Speichernutzung von Code, der reflect verwendet, zu profilieren?

Wie kann ich die Tatsache umgehen, dass gocraft/web Reflexion verwendet und tiefer in das Speicherprofil eingräbt?

Hier ist ein Beispiel für die Profilausgabe Ich bin Mit:

Example Profile

+0

Können Sie versuchen, dies mit go1.5 zu profilieren? Ein Nebeneffekt der neuen Laufzeit ist, dass sie dem Profiler mehr Interna zur Verfügung stellt. – JimB

+0

@ JimB, das wäre toll gewesen, wenn es funktioniert hätte, aber leider nicht. – cellofellow

Antwort

3

Dank @thwd für die Einreichung http://golang.org/issue/11786 darüber. Dies ist ein Anzeigeproblem in pprof. Alle Daten sind da, nur versteckt. Sie können die Daten erhalten, die Sie benötigen, indem Sie pprof mit dem Flag -runtime aufrufen. Es zeigt auch Daten, die Sie nicht benötigen, aber es sollte als eine angemessene Workaround dienen, bis Go 1.6 aus ist.

0

Die kurze Antwort ist, dass Sie nicht direkt möglich. reflect.Value.call ruft reflect.call auf, die an runtime.reflectcall weiterleitet, was eine Assembly-Routine ist, die in der Laufzeit implementiert wird, beispielsweise für amd64, here. Dies umgeht, was der Profiler sehen kann.

Ihre beste Wette ist, Ihre Handler ohne Reflexion aufzurufen und sie so einzeln zu testen.

Das Aktivieren des Profilers zum Verfolgen von reflektierenden Aufrufen wäre auch eine akzeptable Änderung, die für die nächste Go-Iteration vorgeschlagen werden könnte. Sie sollten dem change proposal process dafür folgen.

Bearbeiten: issue erstellt.

+0

@cellofellow: Wenn du nicht vorhast, die Änderung vorzuschlagen, sag mir bitte, dass ich es tun kann. – thwd

+0

gehen Sie voran und machen Sie den Vorschlag :) – cellofellow