varios programa ejecutar desde consola compilar como comandos comando archivos aplicaciones aplicacion java command-line profiling

programa - Perfilado de una aplicación Java en ejecución en la línea de comando



ejecutar shell desde java (6)

¿Puedes recolectar 10 o 20 muestras de stack con jstack ? Entonces, si Foo es un método, su uso general del tiempo es la fracción de las muestras que lo contienen. Su uso de CPU es la fracción de aquellas muestras que no terminan en E / S o una llamada al sistema. Su "tiempo propio" es la fracción de muestras en la que él mismo es el término.

No necesito nada bonito. O lo ejecuto bajo el IDE y los recojo de esa manera, o uso algo como jstack que toma instantáneas de la pila de una aplicación en ejecución.

Esa es la técnica de random-pause .

Perfilo el funcionamiento de aplicaciones Java a menudo con VisualVM, pero necesita X para ejecutarse en la máquina

Sé que puedo conectarme a través del puerto de administración, pero será un perfil de muestra sin conexión que no es suficiente para mí.

Así que estoy buscando una solución con la que pueda perfilar el uso de la CPU de los métodos de una aplicación Java en ejecución desde la línea de comandos. Es suficiente para mí recopilar datos en el servidor y luego los datos recopilados se pueden analizar en una máquina diferente.

Actualizar:

Parece que necesito ser más específico. Quiero perfilar una aplicación Java en ejecución desde la línea de comandos, no quiero detenerla y volver a ejecutarla.



La aplicación jvmtop es una herramienta conveniente para jvmtop perfiles desde la línea de comandos. No es necesario detener el jvm. Uso:

jvmtop.sh --profile <PID>

Le dará un resultado como este que se actualizará mientras se ejecuta la aplicación:

Profiling PID 24015: org.apache.catalina.startup.Bootstrap 36.16% ( 57.57s) hudson.model.AbstractBuild.calcChangeSet() 30.36% ( 48.33s) hudson.scm.SubversionChangeLogParser.parse() 7.14% ( 11.37s) org.kohsuke.stapler.jelly.JellyClassTearOff.parseScript() ...

La ventaja es que no requiere el uso de instrumentación. Las clases del jvm a ser perfilado no serán alteradas.

Si está buscando algo más visual, eche un vistazo a jvm-mon que se basa en jvmtop


Parece que la forma "incorporada" de perfilar una aplicación Java desde la línea de comandos es iniciarla con perfiles de línea de comando, como este

$ java -Xrunhprof:cpu=samples,file=myprogram.hprof ...

A continuación, examine el archivo "myprogram.hprof" con alguna herramienta de GUI (o herramienta de servidor web como jhat ) o herramienta de línea de comandos después de que el proceso finalice (y el archivo se cree en ese momento).

Si utiliza el truco de señal "QUIT", mencionado https://.com/a/2344436/32453 , puede generar un archivo a voluntad sin salir de JVM (parece adjuntarlo al archivo de salida anterior). O espere hasta que el proceso finalice y genere el archivo.

Este generador de perfiles (integrado) hace una muestra con poca frecuencia, por lo general, baja desaceleración / impacto en general.

ref: http://web.archive.org/web/20160623224137/https://thunderguy.com/semicolon/2004/04/18/profiling-a-java-program-easily/


Puede ejecutar la mayoría de los perfiladores comerciales de forma remota para que un agente se ejecute en el servidor y luego conectarse a ese agente a través de un cliente en su máquina de desarrollo. Mi perfil de perfil favorito es JProfiler. Es una compra bastante razonable, y es muy estable (lo que no todos los perfiladores comerciales son ciertos).

http://www.ej-technologies.com/products/jprofiler/overview.html

Otros perfiles comerciales que son estables, pero no mi favorito son YourKIT.

http://www.yourkit.com/

Esos vendedores más pequeños hacen buenas herramientas. Estas herramientas le proporcionarán toneladas de información sobre los tiempos de los métodos, uso de la memoria, GC, etc. Mucho más que jconsole.


Una forma de perfilar una JVM "ya iniciada" es agregar múltiples jstacks tomados a lo largo del tiempo.

Puede, por ejemplo, analizar y mostrarlos como FlameGraph (consulte los detalles en las distintas respuestas para ese enlace, no los FlameGraph redundante aquí).