2011-12-09 14 views
9

Piszę implementację algorytmu za pomocą Java. Do wersji OS X 10.7 używałem profilu Sharka do profilowania mojej implementacji, która działała raczej ładnie. Jednak nowe Instrumenty nie znajdują już nazw procedur. Próbowałem już uruchomić aplikację java z argumentami VM dla rekina (a mianowicie -agentlib: Shark), ale są one nieznane 10.7 i nie mogłem znaleźć takiego agenta dla instrumentów.Brakujące nazwy procedur JAVA w profilu czasu, instrumentach, OS X

Masz pomysł, jak dołączyć nazwy procedur do nazw symboli (które są niektórymi numerami heksadecymalnymi) w Insturments? Używam Eclipse Indigo, jeśli to robi jakąkolwiek różnicę.

Dzięki!

Edycja: Do tej pory nic się nie zmieniło z OS X Mountain Lion.

Edit # 2: Aktualizacja od dewelopera za pośrednictwem Apple bug reportera (?):

dtrace miał wsparcie dla Java układa w punktach w przeszłości, choć szczerze nie mógł powiedzieć, czy wsparcie został zachowany. Może to być realne obejście tego, co próbujesz zmierzyć - co w innym przypadku nie jest priorytetem dla narzędzi wydajności w tym momencie. Możesz zacząć od skryptu D w /usr/bin/cpu_profiler.d i zmienić go, aby również zebrać plik jstack.

Edycja nr 3: W porządku, po dalszych dyskusjach okazuje się, że sam programista nie wiedział, skąd pochodzi ten skrypt. Co ciekawe, profiler czasu w Instruments i tak nie używa DTrace, więc jedyną opcją jest napisanie własnego skryptu DTrace lub instrumentu.

Masz rację, a ja przepraszam. Nie jestem pewien, skąd wziął się ten skrypt, a kiedy uważnie go obejrzałem, nie ma w nim akcji jstack, więc i tak nie jest to, czego chcesz. Wygląda na to, że jedyną opcją profilowania java, którą mogę zaoferować, jest DTrace. DTrace ma dostawcę profilu i akcję jstack, która zbiera stosy Java. Możesz użyć "agregatów" do określenia najcięższych śladów stosu, a wszystko to działa z linii poleceń. Dokumentacja DTrace jest w większości przechowywana przez firmę Sun i skierowuję Cię do dowolnego samouczka DTrace, ponieważ większość obejmuje dostawcę profilu.

Pomimo tego, co ludzie mówią online, Instruments nie używa DTrace do wszystkiego, w szczególności do profilowania czasu, więc nie mogę zaoferować ci szybkiej poprawki w interfejsie Instruments.

Odpowiedz

5

Instrumenty opierają się na uroczym oprogramowaniu opracowanym przez firmę Sun o nazwie dtrace. dtrace ma funkcję o nazwie 'jstack()', która ma wydrukować ślad stosu z symbolami java, istnieje również "ustack()", który powinien robić podobne rzeczy dla innych języków (python, node.js, itp.). Niestety wersja dtrace systemu OS X nie obsługuje tych metod i jako takie Instrumenty nie zapewniają tej funkcji.

Niestety, nie otrzymasz tych informacji od tych narzędzi, dopóki Apple nie naprawi ich. :(

Śledź ten wątek, aby uzyskać więcej informacji: http://www.mail-archive.com/[email protected]/msg04863.html

Mam złożony problem z jabłkiem dotyczących ich brak wsparcia dla znaczników pomocnik stosu, jeśli chcesz tę funkcję należy zgłosić błąd zbyt: https://bugreport.apple.com

+0

Świetnie, dziękuję. Mam nadzieję, że zostanie to naprawione wkrótce, chociaż błąd istnieje już od jakiegoś czasu. Złożę raport o błędzie. – HdM

+0

Dostałem więc aktualizację od programisty, który brzmi: "W przeszłości dtrace obsługiwał stosy Java w punktach, ale szczerze mówiąc nie mogłem powiedzieć, czy wsparcie zostało utrzymane. dla tego, co próbujesz zmierzyć - co w innym przypadku nie jest priorytetem dla narzędzi wydajnościowych. Możesz zacząć od skryptu D w /usr/bin/cpu_profiler.d i zmienić go, aby również pobrać jstack . " – HdM

+0

Byłbym bardzo zainteresowany, aby wiedzieć, czy coś działa. –

0

Jedną rzeczą, która przychodzi mi do głowy to opcja -g do javac kompilatora zawierać informacje debugowania. W eklise (przynajmniej w heliosach) możesz ustawić różne opcje debugowania danych w 'Kompilatorze Java', 'Generowaniu Klasy'. Może niektóre z tych ustawień zostały zmanipulowane.

Nie rozwiązuje to jednak problemu z nazwami metody, które zawsze są zawarte w plikach klas. Jednak różne smaki maszyn wirtualnych Java wykonują optymalizacje środowiska wykonawczego na różne sposoby, patrz na przykład notatka o wiarygodności stack traces w dokumentach.

Dlatego przejście na inną (wersję) maszyny wirtualnej może mieć wpływ na zdolność profilera do poprawnego działania. - Nawiasem mówiąc, nie implicially "uaktualniłeś" swoją wersję Java (np. 1.6 do 1.7) w procesie?

+1

Zrobiłem upgrade do wersji java innej niż ja .. Chociaż o ile mi wiadomo, ten "błąd" zawsze trwał, a brakujące posty "worksforme" wskazują, że prawdopodobnie nie ma to nic wspólnego z vm. problemu, jeśli znajduję haka dtace – HdM

0

Jeśli chcesz profilować aplikacje java, polecam używanie Visualvm z Oracle (przez Java.net).To narzędzie umożliwia profilowanie pamięci i procesora w dół do metody, nawet w przypadku zdalnych maszyn JVM. W systemie OSX oczywistym jest, że nie jest częścią domyślnego JDK, ale można go uzyskać tutaj: http://visualvm.java.net/download.html Może być alternatywą dla rekina.

+0

Próbowałem visualvm, ale jestem bardzo niezadowolony z niego.W porównaniu z rekina lub instrumentów, to przylega, ma śmieszne obciążenie i to jest dość trudna t, aby rozpocząć, nawet za pomocą wtyczki eclipse. Dla mnie to nie jest alternatywa. – HdM