2011-12-09 3 views
9

Java를 사용하여 알고리즘 구현을 작성 중입니다. OS X 10.7이 될 때까지 Shark Profiler를 사용하여 구현을 프로파일 링했습니다. 그러나 새로운 Instruments는 더 이상 프로 시저 이름을 찾지 않습니다. 나는 이미 상어 (즉, -agentlib : Shark)를위한 VM 인수를 사용하여 Java 애플리케이션을 실행하려고 시도했지만, 이들은 10.7에 알려지지 않았기 때문에 인스트루먼트를위한 agentlib를 찾을 수 없었다.Time Profiler, Instruments, OS X에서 JAVA 프로 시저 이름이 누락되었습니다.

Insturments에서 기호 이름 (16 진수 숫자)에 프로 시저 이름을 붙일 수있는 방법에 대한 아이디어가 있습니까? 차이가 있다면 Eclipse Indigo를 사용하고 있습니다.

감사합니다.

편집 : 지금까지 OS X Mountain Lion에서는 아무 것도 변경되지 않았습니다.

는 는

편집 # 2 : (?) 애플의 버그 리포터를 통해 개발자로부터 업데이트 : Java 용

DTrace를 갖고 지원, 과거 지점에서 스택은 솔직히 지원 여부를 말할 수 있지만 유지되었습니다. 현재 측정 도구의 우선 순위가 아닌 측정하려는 항목에 대해 실용적인 해결 방법이 될 수 있습니다. /usr/bin/cpu_profiler.d에있는 D 스크립트로 시작하여 jstack을 수집하도록 수정할 수도 있습니다.

편집 # 3 : 좋아, 더 많은 토론을 마친 후에 개발자가 스크립트의 출처를 알 수 없다는 것이 밝혀졌습니다. Apparatus에서는 Instrument의 time profiler가 DTrace를 사용하지 않기 때문에 유일한 옵션은 자체 DTrace 스크립트 또는 악기를 작성하는 것입니다.

네가 맞아, 사과 하네. 그 스크립트가 어디서 왔는지 나는 잘 모르겠다. 신중하게 살펴 보았을 때, 그 안에 덩어리 액션이 없기 때문에 어쨌든 네가 원하는 것은 아니다. DTrace를 제공 ​​할 수있는 유일한 Java 프로파일 링 옵션처럼 보입니다. DTrace에는 프로필 공급자와 Java 스택을 수집하는 jstack 작업이 있습니다. "aggregates"를 사용하여 가장 큰 스택 트레이스를 결정할 수 있으며이 모든 것은 명령 행에서 작동합니다. DTrace에 관한 문서는 대부분 Sun에서 관리하고 있으며, 대부분 DTrace 튜토리얼로 안내 할 것입니다. 대부분 DTrace 튜토리얼이 프로필 공급자를 다루고 있기 때문입니다.

사람들이 온라인에 말하는 것과는 달리, Instruments는 모든 것, 특히 시간 프로파일 링에 DTrace를 사용하지 않으므로 Instruments UI에서 신속한 해결책을 제공 할 수는 없습니다.

답변

5

인스트루먼트는 dtrace라는 Sun에서 개발 한 멋진 소프트웨어를 사용합니다. dtrace에는 'jstack()'이라는 함수가 있습니다.이 함수는 자바 심볼이있는 스택 추적을 출력하기로되어 있습니다. 다른 langauges (python, node.js 등)와 비슷한 기능을 수행하는 'ustack()'도 있습니다.). 불행하게도 OS X의 dtrace 버전은 그러한 메소드를 지원하지 않으며, 그러한 인스트루먼트는 그러한 기능을 제공하지 않습니다.

그래서 불행히도 Apple이 자신의 문제를 해결할 때까지 이러한 정보를 얻지 못할 것입니다. :(

더 많은 정보를 원하시면이 스레드를 따르 https://bugreport.apple.com

: http://www.mail-archive.com/[email protected]/msg04863.html

나는이 기능을 원하는 경우도 버그를 제출해야 도우미 스택 추적기에 대한 지원의 부족에 대한 사과와 함께 버그를 제기했습니다

+0

좋아, 고마워. 버그가 꽤 오랫동안 있었지만 곧 해결 될 수 있기를 바랍니다. 나는 버그 보고서를 제출할 것이다. – HdM

+0

그럼, 다음을 읽는 개발자로부터 업데이트가 있습니다 : "dtrace는 지원 시점이 정직하지 못했지만 과거 시점에서 Java 스택을 지원했습니다. 가능한 해결 방법이 될 수 있습니다. 현재 측정 도구의 우선 순위가 아닌 측정하려는 항목입니다. /usr/bin/cpu_profiler.d에있는 D 스크립트로 시작하여 jstack을 수집하도록 수정할 수도 있습니다 . " – HdM

+0

나는 일하는 것이 무엇인지 알기에 매우 흥미가 있습니다. –

0

디버그 정보를 포함하도록 javac 컴파일러에 대한 -g 옵션이 내 마음에 떠오릅니다. eclise (적어도 helios에서는)에서는 'Java Compiler', 'Classfile Generation'에서 데이터 디버깅을위한 다양한 옵션을 설정할 수 있습니다. 어쩌면 그 중 일부 설정이 엉망이 됐을 수도 있습니다.

그러나 이것은 항상 클래스 파일에 포함되어있는 방법의 이름과 관련된 문제를 해결하지 못합니다. 그러나 Java VM의 다양한 기능은 다양한 방식으로 런타임 최적화를 수행합니다. 예를 들어 문서의 stack traces의 안정성에 대한 참고 사항을 참조하십시오.

따라서 다른 VM 버전으로 전환하면 프로파일 러에서 올바른 작업을 수행하는 데 영향을 줄 수 있습니다. - 그런데 프로세스에서 Java 버전 (예 : 1.6에서 1.7)을 암시 적으로 '업그레이드'하지 않았습니까?

+1

비 사과 자바 버전으로 업그레이드했습니다. 알고있는 한,이 "버그"는 항상 지속되고 누락 된 "worksforme"게시물은 VM과는 아무런 관련이 없음을 나타냅니다. dtace 후크를 찾으면 문제가 생긴다. – HdM

0

Java 응용 프로그램을 프로파일 링하려면 Java.net을 통해 Oracle에서 Visualvm을 사용하는 것이 좋습니다.이 도구는 원격 JVM의 경우에도 메모리 및 CPU를 메소드에 프로파일 링 할 수 있습니다. OSX에서는 기본 JDK의 일부는 아니지만 분명히 여기에 넣을 수 있습니다. http://visualvm.java.net/download.html 상어의 대안이 될 수 있습니다.

+0

나는 visualvm을 사용해 보았지만, 나는 그것을 매우 좋아하지 않는다. 상어 나 악기와 비교할 때, 그것은 어설픈 것이고, 어리석은 오버 헤드가 있으며, 꽤 어렵다. 이클립스 플러그인으로 시작한다. 나에게 이것은 대안이 아니다. – HdM