2011-07-16 14 views
6

Esto podría parecer una pregunta tonta, pero después de hacer algunas preguntas sobre stackoverflow y mirar la pregunta de otras personas, una cosa que viene a menudo es usar profilers para ver qué parte del código se ejecuta lento, etc.Necesita saber cómo usar los profilers/cuál usar

Siendo un principiante de la programación, soy nuevo en todo esto, pero como estoy creando un proyecto cada vez más grande, siento que tal herramienta resultaría ser muy útil en veces. Lo único es que no sé cómo usarlos.

Normalmente uso JDeveloper para codificar en Java y leo en Internet que hay uno incorporado. Traté de usarlo, pero creo que realmente no sabía cómo porque no pude encontrar qué partes hacían que mi programa fuera más lento. No sé si es porque no sé cómo usarlo o si es conocido por no ser bueno, así que pensé en preguntar aquí para ver con cuál debería comenzar.

Tengo instalado Eclipse y sé cómo usarlo (uso Eclipse cuando estoy codificando Python o cuando estoy intentando tutoriales para desarrollo de Android), así que si hay un generador de perfiles gratuito que podría usar para cualquiera de esos dos IDEs, realmente me gustaría saberlo. Además, un tutorial o cosas básicas que necesito saber sobre los profilers me ayudaría mucho.

Gracias de antemano y siento que mi pregunta no es realmente acerca de la programación, pero este parece ser el mejor lugar para obtener información valiosa sobre los perfiladores.

Respuesta

3

Si está confundido, so are most of the profiler vendors.

Lo primero que debe entender es que los programas no son lentos porque tienen partes lentas (cuellos de botella). Son lentos porque hacen más de lo necesario. Tienen desagües de tiempo.

Es como una carrera de caballos. Un cuello de botella sería un lugar estrecho en la pista, donde los caballos tienen que acumularse y reducir la velocidad. Una fuga de tiempo sería como otra pista fusionada con la primera, en la que los caballos vagan y tienen que viajar una distancia extra. Entonces podría haber otra pista fusionada con esa, y otra, y así sucesivamente.

Una llamada a la función que podría evitarse es un ejemplo de un drenaje de tiempo.

Here's how I find time drains. Es simple e independiente del idioma. Incluso puede hacerlo con una herramienta simple como jStack.

Los fabricantes de perfiladores tienen buenas intenciones, pero se ven obstaculizados por una gran cantidad de conceptos confusos.

Tales como "donde pasa el tiempo". Si lo que esto significa es "donde el contador del programa se encuentra con más frecuencia", es como si el caballo estuviera en el hipódromo equivocado. Puedes intentar acortar esa pista, pero el verdadero problema es que el caballo ni siquiera debería estar allí. es decir, hay una llamada de función que debería haberse evitado.

Tales como "precisión estadística de medición". ¿Necesitas medir cuánto tiempo tarda el caballo en rodear la pista equivocada para saber que está en la pista equivocada? No, solo necesita tomar una instantánea (muestra de la pila). Cuanto más tiempo esté en el hipódromo incorrecto, más probabilidades habrá de que lo vea. Si lo ve allí dos veces, ya sabe cuál es el problema.

Tales como llamarlo "CPU Profiler", que es una excusa para ignorar el tiempo de E/S. A veces, el tiempo de desagüe es una E/S innecesaria de la que no tenía conocimiento. Eso sería como el caballo que se detiene para comer una bolsa de avena. Si solo puede tomar su instantánea mientras el caballo está en funcionamiento, nunca notará. Solo notará que el tiempo fue sospechosamente largo.

Hay more where those came from ...

+0

Los enlaces que publicó son lecturas muy interesantes. Intentaré aplicar lo que sugirieron y estoy seguro de que terminará ayudando a una tonelada en el futuro. ¡Muchas gracias! –

3

Si está buscando una herramienta gratuita, jvisulavm es excelente. Viene con una instalación estándar de JDK, su ejecutable generalmente está bajo el directorio bin de JAVA_HOME, al lado de java, javac, javadoc y sus hermanos. Aquí hay un tutorial:

http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/index.html

Si usted está buscando un producto comercial más avanzado o YourKitjprofiler son interesantes.

+1

VisualVM los estrenos más regularidad que el JDK, por lo que es posible que desee descargar la [versión más reciente] (http://visualvm.java.net/download.html). –

1

El uso del generador de perfiles no es una tarea trivial y requiere una gran cantidad de conocimientos básicos sobre el funcionamiento interno de la VM. Por lo tanto, es mejor comenzar con la lectura sobre administración de memoria, zona activa, etc. Puede encontrar ayuda decente en las páginas de ayuda del generador de perfiles, consulte, por ejemplo, help for JProfiler.

En mi experiencia, solo tuve que usar Profiler algunas veces cuando surgieron algunos problemas graves de rendimiento que no pudieron ser rastreados por otros medios. En muchos casos, las cosas simples, como las marcas de tiempo en el registro, ayudan a resolver los problemas de rendimiento. Entonces use Profiler como último recurso. Dijo que, me enteré de casos en que las personas lo usarían regularmente. Pensé en ello, pero nunca pude lograr que este proceso funcionara para mí.

No he podido encontrar ningún generador de perfiles gratuito que me satisfaga. Los comerciales que utilicé en diferentes momentos son JProbe y JProfiler. JPFiler me gustó más, pero ambos te permiten obtener resultados.

Generalmente, el proceso comienza con la configuración de la aplicación dentro del generador de perfiles y diciéndole qué clases desea buscar específicamente. Cuando inicia su aplicación en el generador de perfiles, las clases se instrumentan de tal forma que la información sobre la ejecución y la máquina virtual se graba. Entonces, después de ejecutar su aplicación, puede analizarla para ver qué código consumió la mayor parte del tiempo y qué objetos usaron la mayor parte de la memoria. A menudo también puede monitorear hilos, monitores y otras cosas. Para aprovechar toda la información, necesitará comprender mucho acerca de las partes internas de la VM y el código que está creando.

¡Buena suerte!

Cuestiones relacionadas