2011-12-09 7 views
9

Estoy escribiendo una implementación de algoritmo usando Java. Hasta OS X 10.7, utilicé el Shark Profiler para perfilar mi implementación, que funcionó bastante bien. Sin embargo, los nuevos instrumentos ya no encuentran los nombres de los procedimientos. Ya intenté ejecutar la aplicación java con los argumentos VM para shark (concretamente, -agentlib: Shark), pero se desconocen a 10.7, y no pude encontrar tal agentlib para los instrumentos.Faltan nombres de procedimientos JAVA en Time Profiler, Instruments, OS X

¿Alguna idea sobre cómo puedo adjuntar nombres de procedimientos a los nombres de símbolos (que son algunos números hexadecimales) en Insturments? Estoy usando Eclipse Indigo, si eso hace alguna diferencia.

Gracias!

Editar: Hasta ahora, nada ha cambiado con OS X Mountain Lion.

Edición # 2: Una actualización de un desarrollador a través de reportero de errores de Apple (?):

dtrace apoyo ha tenido para Java se acumula en los puntos en el pasado, aunque honestamente no podría decir si el apoyo ha sido mantenido. Puede ser una solución viable para lo que está tratando de medir, que de otro modo no sería una prioridad para las herramientas de rendimiento en este momento. Es posible que desee comenzar con el script D en /usr/bin/cpu_profiler.d y modificarlo para recopilar el jstack también.

Edición # 3: Muy bien, después de algunas discusiones más, resulta que el desarrollador mismo no sabía de dónde provenía esa secuencia de comandos. Aparentemente, el perfilador de tiempo en Instruments no usa DTrace de ninguna manera, por lo que la única opción que queda es escribir nuestro propio script o instrumento DTrace.

Tienes razón, y me disculpo. No estoy seguro de dónde vino ese guión, y cuando lo analicé cuidadosamente, no tiene acciones jstack, así que no es lo que quieres de todos modos. Parece que la única opción de creación de perfiles de Java que puedo ofrecer es DTrace. DTrace tiene un proveedor de perfiles y una acción jstack que recopila pilas java. Puede usar "agregados" para determinar los rastros de pila más pesados, y todo esto funciona desde la línea de comandos. La documentación de DTrace es mantenida principalmente por Sun y yo te dirigiría a cualquier tutorial de DTrace ya que la mayoría cubre el proveedor de perfiles.

A pesar de lo que dice la gente en línea, Instruments no utiliza DTrace para todo, específicamente para el perfil del tiempo, por lo que no puedo ofrecerle una solución rápida en la interfaz de usuario de Instruments.

Respuesta

5

Los instrumentos se basan en un pequeño software encantador desarrollado por Sun llamado dtrace. dtrace tiene una función llamada 'jstack()' que se supone que imprime un rastro de pila con símbolos java, también hay un 'ustack()' que se supone que hace cosas similares para otros lenguajes (python, node.js, etc.)) Desafortunadamente, la versión de dtrace de OS X no es compatible con esos métodos y, como tal, los instrumentos no proporcionarán esa funcionalidad.

Por lo tanto, desafortunadamente no obtendrás esa información de esas herramientas hasta que Apple arregle sus cosas. :(

Siga este hilo para más información: http://www.mail-archive.com/[email protected]/msg04863.html

Yo he presentado un error de manzana con respecto a su falta de apoyo a los trazadores de pila auxiliar, si desea que esta funcionalidad debe presentar un error demasiado: https://bugreport.apple.com

+0

Genial, gracias. Espero que esto se resuelva pronto, aunque el error ha existido desde hace bastante tiempo. Archivaré un informe de error. – HdM

+0

Entonces, recibí una actualización de un desarrollador que dice lo siguiente: "dtrace ha tenido soporte para acumulaciones de Java en momentos pasados, aunque honestamente no pude decir si el soporte se ha mantenido. Puede ser una solución viable para lo que está tratando de medir, que de otro modo no sería una prioridad para las herramientas de rendimiento en este punto. Puede comenzar con el script D en /usr/bin/cpu_profiler.d y modificarlo para recolectar el jstack también. " – HdM

+0

Estaría muy interesado en saber si funciona algo. –

0

Una cosa que viene a la mente es la opción -g a la javac compilador que incluya la información de depuración. En eclise (al menos en helios) puede establecer diferentes opciones para depurar datos en 'Java Compiler', 'Classfile Generation'. Tal vez algunos de esos ajustes se rompieron.

Esto, sin embargo, no resuelve el problema con los nombres del método , que siempre se incluyen en los archivos de clase. Sin embargo, los diferentes sabores de las máquinas virtuales de Java realizan optimizaciones de tiempo de ejecución de diferentes maneras, vea por ejemplo la nota sobre la confiabilidad de stack traces en los documentos.

Por lo tanto, el cambio a otra (versión de) máquina virtual puede tener un impacto en la capacidad del generador de perfiles para hacer lo correcto. - Por cierto, ¿no "actualizó" implícitamente su versión de Java (por ejemplo, 1.6 a 1.7) en el proceso?

+1

Me actualicé a una versión java que no sea de Apple. Aunque hasta donde yo sé, este "error" siempre persistió, y las publicaciones faltantes de "worksforme" indican que probablemente no tiene nada que ver con el vm. Creo que es más de un problema si encuentro un gancho de dtace. – HdM

0

Si desea crear un perfil de las aplicaciones de Java, le recomiendo usar Visualvm de Oracle (a través de Java.net).Esta herramienta puede perfilar la memoria y la CPU hasta el método, incluso para las JVM remotas. En OSX es obvio que no es parte del JDK predeterminado, pero puede obtenerlo aquí: http://visualvm.java.net/download.html Puede ser una alternativa al tiburón.

+0

Intenté visualizar, pero estoy muy insatisfecho con él. Comparado con el tiburón o los instrumentos, es torpe, tiene una sobrecarga ridícula y es bastante difícil t para comenzar, incluso con el plugin Eclipse. Para mí, esta no es una alternativa. – HdM