Ich schreibe eine Algorithmusimplementierung mit Java. Bis OS X 10.7 habe ich den Shark Profiler verwendet, um meine Implementierung zu profilieren, was ziemlich gut funktioniert hat. Die neuen Instrumente finden die Prozedurnamen jedoch nicht mehr. Ich habe bereits versucht, die Java-Anwendung mit den VM-Argumenten für Hai (nämlich, -agentlib: Shark) auszuführen, aber sie sind 10.7 unbekannt, und ich konnte eine solche Agentlib für Instrumente nicht finden.
Irgendeine Idee, wie ich Prozedurnamen an die Symbolnamen (welche sind einige Hex-Nummern) in Insturments anhängen kann? Ich benutze Eclipse Indigo, wenn das einen Unterschied macht.
Danke!
Bearbeiten: Bisher hat sich mit OS X Mountain Lion nichts geändert.
Edit # 2: Ein Update von einem (?) Entwickler via Apple Bug Reporter:
dtrace hat in der Vergangenheit Java-Stacks unterstützt, obwohl ich ehrlich gesagt nicht sagen konnte, ob die Unterstützung beibehalten wurde. Es kann eine praktikable Lösung für das sein, was Sie messen möchten - was zu diesem Zeitpunkt keine Priorität für die Performance-Tools ist. Vielleicht möchten Sie mit dem D-Skript in /usr/bin/cpu_profiler.d beginnen und es ändern, um auch den Jstack zu sammeln.
Edit # 3: Nach ein paar weiteren Diskussionen stellt sich heraus, dass der Entwickler selbst nicht wusste, woher das Skript kam. Offensichtlich benutzt der Zeitprofiler in Instruments DTrace sowieso nicht, also bleibt nur noch die Möglichkeit, unser eigenes DTrace-Skript oder -Instrument zu schreiben.
Sie haben Recht, und ich entschuldige mich. Ich bin mir nicht sicher, woher das Skript kam und als ich es mir genau anschaute, hat es keine JStack-Aktionen, also ist es nicht das, was du willst. Es sieht so aus, als ob die einzige Java-Profiling-Option, die ich Ihnen anbieten kann, DTrace ist. DTrace hat einen Profilanbieter und eine Jstack-Aktion, die Java-Stacks sammelt. Sie können "Aggregate" verwenden, um die schwersten Stack-Traces zu ermitteln, und all dies funktioniert über die Befehlszeile. Die Dokumentation für DTrace wird hauptsächlich von Sun verwaltet und ich würde Sie zu jedem DTrace-Tutorial leiten, da die meisten den Profilanbieter abdecken.
Trotz der Behauptungen von Menschen im Internet verwendet Instruments DTrace nicht für alles, insbesondere nicht für Zeitprofile. Daher kann ich Ihnen keine schnelle Lösung in der Benutzeroberfläche von Instruments anbieten.
Instruments verlässt sich auf ein paar schöne Software von Sun namens Dtrace. dtrace hat eine Funktion namens 'jstack ()', die einen Stack-Trace mit Java-Symbolen drucken soll, es gibt auch einen 'stack ()', der ähnliche Befehle für andere Sprachen (python, node.js usw.) ausführen soll. ). Leider unterstützt die OS X-Version von dtrace diese Methoden nicht, und solche Instrumente werden diese Funktionalität nicht bieten.
Leider werden Sie diese Informationen nicht von diesen Tools erhalten, bis Apple ihre Sachen repariert hat. : (
Folgen Sie diesem Thema für weitere Informationen: Ссылка
Ich habe einen Fehler mit Apple wegen ihrer fehlenden Unterstützung für Hilfsstapel-Tracer eingereicht. Wenn Sie diese Funktionalität wünschen, sollten Sie auch einen Fehler melden: Ссылка
Eine Sache, die mir in den Sinn kommt, ist die Option -g
für den javac
-Compiler, die Debugging-Informationen enthält. In eclise (zumindest in Helios) können Sie unter 'Java Compiler', 'Classfile Generation' verschiedene Optionen für das Debugging von Daten einstellen. Vielleicht sind einige dieser Einstellungen kaputt gegangen.
Dies löst jedoch nicht das Problem mit Methoden Namen, die immer in den Klassendateien enthalten sind. Verschiedene Varianten von Java-VMs führen Laufzeitoptimierungen auf unterschiedliche Weise aus, siehe zum Beispiel die Anmerkung zur Zuverlässigkeit von stack Spuren in den Dokumenten.
Daher kann der Wechsel zu einer anderen (Version von) VM Auswirkungen auf die Fähigkeit des Profilers haben, das Richtige zu tun. - Übrigens hast du deine Java-Version (z. B. 1.6 bis 1.7) nicht implizit "upgegradet"?
Wenn Sie Java-Anwendungen profilieren möchten, empfehle ich Ihnen, Visualvm von Oracle (über Java.net) zu verwenden. Dieses Tool kann Speicher und CPU bis auf die Methode profilieren, auch für Remote-JVMs. Unter OSX ist es offensichtlich nicht Teil des Standard-JDK, aber Sie können es hier bekommen: Ссылка Kann eine Alternative zu Hai sein.
Tags und Links java profiling macos instruments dtrace