procesos

  • En la salida de atop de un servidor Linux me encontré con esta situación extraña:

    Si queda memoria principal disponible y el uso de swap es cero, ¿por qué la fila SWP figura en color rojo (uso crítico)?

  • Cuantas veces necesitamos obtener información sobre procesos y utilizamos la instrucción:

    ps aux

    Sin saber bien ¿qué hace?

  • En Bash, es posible obtener el código de retorno, también llamado estado de salida (exit status), del último comando ejecutado consultando a la variable $?.

  • Este artículo explica cómo transformar un proceso en servicio en Windows Server. Supongamos que hemos desarrollado una aplicación Java que provee cierto servicio, o implementa un demonio (proceso que corre en segundo plano), y deseamos crear un servicio de Windows para gestionar la ejecución del mismo. Para ello es posible recurrir a la herramienta srvany.exe provista por el Windows Resource Kit de Windows Server 2003.

  • A veces es necesario conocer con exactitud la fecha y hora en la que fue creado un proceso, generalmente cuando se trata de diagnosticar errores.

  • ¿De qué forma se puede determinar qué proceso está escuchando en un determinado puerto? Supongamos que necesitamos ejecutar un programa que abre el puerto 6789 para aceptar conexiones. Pero al momento de crear el socket el programa finaliza con error debido a que el puerto está siendo utilizado por otro proceso. Esta situación se puede presentar, por ejemplo, cuando estamos desarrollando y probando un programa que abre conexiones y nos quedan instancias abiertas ocupando puertos.

  • Mientras estaba haciendo un tunning de performance de un servidor MySQL, tuve la necesidad de determinar qué procesos estaban utilizando mayor cantidad de espacio en el área de intercambio en memoria secundaria (más conocida como swap). Para ello recurrí al viejo y querido top.

  • La herramienta strace intercepta y registra todas las llamadas al sistema operativo (kernel) realizadas y señales recibidas por un proceso en Linux. Esta herramienta de debug permite así listar todos los archivos que abre un proceso mediante el seguimiento de las invocaciones a la llamada al sistema operativo (syscall) sys_open.

  • A veces necesitamos saber cuales son todos los archivos abiertos por un proceso en un sistema operativo de la familia Unix (GNU/Linux, *BSD, Solaris, etcétera). Por ejemplo, deseamos saber en qué archivo está registrando su log un demonio. Para ello es posible recurrir a la herramienta lsof.

  • En este artículo voy a explicar la forma correcta para listar todos los procesos pertenecientes a un usuario específico, junto con algunas características interesantes de la herramienta ps.

  • Respuesta corta: no es posible matar un proceso "zombie", porque ya está muerto. Pero sí es posible matar al jefe de los vampiros.

    En sistemas operativos de la familia Unix, puede ocurrir que un proceso sea marcado como "zombie" o "difunto". Esta es una situación anormal. Haciendo una analogía terrible, tener procesos "zombie" en un sistema Unix, es como tener cadáveres pudriéndose en las calles. Es decir, muertos sin sepultar. Por ello han sido llamados zombies.

    Esto ocurre cuando un proceso finaliza su ejecución (termina), pero su padre (proceso que inició al proceso zombie) no está esperando por su finalización (no recibe el código de retorno). Un proceso "zombie" no existe como tal, ya no está en memoria y no utiliza CPU. Pero el núcleo del sistema operativo aún mantiene información acerca del mismo, el estado de salida o código de retorno, y está esperando que el proceso padre la reclame.

    Entonces, un proceso "zombie" es una simple entrada en la tabla de procesos del núcleo del sistema operativo. Lo cual implica que no es posible matar un proceso "zombie", porque ya está muerto. Por más que se le envíen señales como kill -"hachazo en la cabeza", no va a desaparecer (digamos que no ocurre como en las series de zombies).

  • ¿Querés saber hace cuántos días se encuentra corriendo de forma ininterrumpida un servidor de bases de datos MySQL? En este artículo presento tres formas diferentes de obtener el esta información.

  • Poder ver el comando completo con el que se lanzó un proceso, el eterno drama al ejecutar ps aux.

    root@debian:~# ps 2778
      PID TTY      STAT   TIME COMMAND
     2778 ?        Sl    78:51 /opt/BostaSoft/app/jre/bin/java -Dprogram.name=run.s
    

    Existen varias formas de lograr el cometido y en este artículo explico algunas de las que conozco.

  • He liberado la tercera versión estable de sere, mi herramienta para monitorear servidores Web en tiempo real desde cualquier navegador Web. Esta versión trae algunas novedades:

    • Posee gráficas mejoradas.
    • Muestra un extracto de los diez procesos que más CPU consumen.
    • Funciona correctamente en la mayoría de los navegadores, incluyendo Internet Explorer 11.
    • Muestra el uptime, fecha y usuarios cantidad de usuarios.
    • Muestra la carga promedio en los últimos 1, 5 y 15 minutos.
  • Esta semana tuve la oportunidad de mostrar en el laboratorio de Sistemas Operativos y Distribuidos las diferentes técnicas y herramientas para gestionar procesos en GNU/Linux: listar procesos en ejecución, obtener información de procesos, iniciar y detener procesos, determinar y alterar la prioridad de ejecución de procesos y gestionar procesos en segundo plano.

  • Necesitamos obtener un listado de procesos en un sistema Windows y al intentar ejecutar ps aux obtenemos:

    A diferencia de los sistemas de la familia Unix, Windows no posee el comando ps, aunque incluye un comando tasklist relativamente decente para lograr el objetivo de listar procesos.

  • Cada vez que necesitamos monitorear el consumo de recursos de un sistema (como por ejemplo CPU, memoria, etc.) en tiempo real, recurrimos al clásico top, o su versión más colorida y amigable: htop.


    Salida de la herramienta top


    Salida de la herramienta htop

    En general estos funcionan muy bien para un uso básico, como monitorear el consumo de CPU o memoria. Aunque existe una alternativa más avanzada que provee una salida mucho más informativa: atop.

  • Cuando se requiere monitorear el uso de CPU en un sistema operativo de la familia Unix, típicamente se utilizan herramientas como top, atop o htop. Sin embargo, estas herramientas trabajan en modo interactivo. Si se necesita obtener una lista de procesos que más CPU consumen en un instante dado, ya sea para guardar en un archivo, enviar por mail, reenviar a otro comando o utilizar desde otra aplicación, se puede recurrir al modo batch de top.

  • Los sistemas Linux actuales tienen ciertos procesos que ejecutan código del kernel Linux, pero son manejados como procesos del espacio usuario en lo que respecta a planificación (scheduling). Sin embargo no respetan las reglas típicas de manejo de memoria ya que corren código del kernel.

    Estos procesos son creados por kthreadd, el cual es una especie de init para procesos del kernel. Es posible reconocerlos porque usualmente la herramienta ps los lista con un nombre entre corchetes:

    root@debian9:~# ps -ef | grep '\[' | head -n 10
    root         1     0  0  2018 ?        00:01:38 init [2]
    root         2     0  0  2018 ?        00:00:23 [kthreadd]
    root         3     2  0  2018 ?        00:00:00 [rcu_gp]
    root         7     2  0  2018 ?        00:00:00 [mm_percpu_wq]
    root         8     2  0  2018 ?        00:00:13 [ksoftirqd/0]
    root         9     2  0  2018 ?        00:41:15 [rcu_sched]
    root        10     2  0  2018 ?        00:00:00 [rcu_bh]
    root        11     2  0  2018 ?        00:00:00 [migration/0]
    root        12     2  0  2018 ?        00:00:24 [watchdog/0]
    root        13     2  0  2018 ?        00:00:00 [cpuhp/0]
    

    Los hilos del kernel no son hijos de init ya que pueden ser iniciados antes de que arranque el espacio usuario (userland, PID 1 en adelante). Estos procesos típicamente se encargan de manejar hardware, por eso son gestionados directamente por el kernel y tienen alta prioridad.

    Este artículo demuestra cómo ocultar estos procesos en la salida de ps.

  • Haciendo pruebas en un servidor Ubuntu Server 12.04.04 LTS me encontré con un proceso desconocido llamado "whoopsie". Nunca antes había visto ese proceso en otros sistemas GNU/Linux, por lo que me llamó poderosamente la atención, e inmediatamente me surgieron dos preguntas: ¿Qué es el proceso whoopsie? y ¿Cómo hago para desactivarlo/eliminarlo/desinstalarlo?. Es sabido que muchos administradores de sistemas tenemos la manía de tendencia a desinstalar, eliminar y desactivar todo software/proceso que no sea absolutamente necesario.