Obtener el tiempo de ejecución de un proceso de usuario en Linux

¿Cómo puedo obtener los detalles de un proceso en Linux? Quiero el tiempo total de ejecución, el mapa de memoria de un proceso. En este contexto, el proceso será un simple programa Java. Solo conozco el nombre del archivo, no la identificación del proceso. Cualquier ayuda será apreciada

Respuesta 1

Si el proceso aún no se está ejecutando, timeimprimirá el tiempo total de ejecución. Hay un bash incorporado y un comando independiente de ese nombre, con un comportamiento algo diferente. Pero como su mención de los mapas de memoria sugiere un proceso que ya se está ejecutando, me concentraré en eso.

Puede encontrar un proceso ejecutable usando ps -C java. Si desea saber qué está ejecutando ese binario de Java, puede hacer cosas como esta para encontrar el pid:

ps -C java -o pid,time,cmd | awk '/foo\.jar/{print $1,$2}' | \
while read pid time; do
    echo "PID $pid, TIME $time"
    cat /proc/$pid/maps
    echo ""
done

Si no le gusta el formato de salida, reemplace el bucle con algo más.

Esto es lo que hace esto:

  • -C java: Encuentra procesos de Java
  • -o pid,time,cmd: Imprimir estos campos
  • /foo\.jar/: Solo tome líneas que contengan esa expresión regular
  • print $1,$2: Imprimir columnas pid y time
  • /proc/$pid/maps: Acceda al archivo de proceso que contiene el mapa de memoria
Respuesta: 2

Si solo conoce el nombre del programa y no la identificación del proceso, primero debe averiguar qué procesos (pueden ser muchos de ellos) ejecutan ese programa.

Podría usar, por ejemplo, algunos de los comandos a continuación para averiguar, suponiendo que el nombre del programa es progname:

ps auxw | grep progname
pidof progname
pgrep progname

(tenga en cuenta que si está utilizando una JVM para ejecutar algún programa Java, prognamesiempre es lo javaque no ayuda mucho)

También puedes usar topohtop

Una vez que tenga un pid interesante, por ejemplo 1234, puede obtener más información sobre ese proceso con, por ejemplo:

ps -lw 1234
cat /proc/1234/status
cat /proc/1234/stat
cat /proc/1234/stack
cat /proc/1234/maps
cat /proc/1234/smaps

Mire también en otros archivos y directorios de /proc/1234/tales como /proc/1234/fd/y otros.

El kernel de Linux está proporcionando información sobre los procesos a través de /proclo que debe aprender más al respecto.

Respuesta: 3

Estoy tratando de crear una migración simple de la base de datos en Intellij con algunas tablas ficticias usando flyway. Mis tablas ficticias se colocan en "recursos / db / migración" y tienen el formato de "...

Estoy en una aplicación JSF, tengo un archivo .bat que quiero iniciar al hacer clic en un botón de Comando, este script está en el directorio de contenido web de mi proyecto. El código de la acción es: Cadena pública ...

Tengo un solucionador de temas en mi aplicación. Hay dos temas: oscuro y blanco. <p th: text = "$ {param.theme}"> </p> Esto devuelve el tema actual, oscuro o blanco. Sin embargo, el <p th: ...

¿Existe una diferencia de rendimiento entre las operaciones == y> / <específicamente en Java? Ya he leído esta respuesta, pero no dice en términos de Java ni la comparación está en el medio ...