Administración del servidor

Comandos de gestión de procesos de Linux

En la administración de servidores, es muy importante comprender cómo funcionan los procesos en detalle, desde procesos de carga alta a procesos de respuesta lenta. Cuando tu servidor llega a ser muy lento o no responde, debes comprender la gestión de procesos o la gestión de procesos de Linux en específico para actuar.

Debes conocer cuando es el momento de terminar un proceso o hacer renice, cómo monitorear los procesos actualmente en ejecución y cómo estos procesos afectan la carga del sistema. Veamos cómo la gestión de procesos de Linux nos ayudará a entonar el sistema.


 

 

Tipos de procesos

Antes de comenzar a hablar acerca de la administración de procesos de Linux, debemos conocer los tipos de procesos. Hay cuatro tipos de procesos comunes:

  • Procesos padres
  • Procesos hijos
  • Procesos huérfanos
  • Procesos Demonios
  • Procesos Zombies

El proceso padre o principal es ejecuta la llamada al sistema fork (). Todos los procesos, excepto el proceso 0, tienen un proceso principal.

Proceso hijo es creado por un proceso padre.

Proceso huérfano continúa ejecutándose después que su proceso principal ha sido terminado o finalizado.

Proceso Daemon siempre se crea desde un proceso secundario y luego termina.

Proceso Zombie existe en la tabla de procesos, aunque haya terminado.

El proceso huérfano es un proceso que todavía se está ejecutando y su proceso principal ha terminado, estos no pueden convertir en procesos zombies.

 


Gestión de la memoria

En la administración de servidores, la administración de la memoria es una de tus responsabilidades más importantes que debes considerar como administrador del sistema.

Uno de los comandos más utilizados en la gestión de procesos de Linux es el comando free

$ free m

La opción -m sirve para mostrar los valores en megabytes.

gestión de procesos de Linux

Nuestra principal preocupación es buff/cache.

La salida del comando free aquí significa que 536 megabytes están en uso, mientras que 1221 megabytes se encuentran disponibles.

La segunda línea es el swap. El swap ocurre cuando la memoria se llena.

El primer valor es el tamaño de swap total que es 3070 megabytes.

El segundo valor es el swap utilizado que es 0.

Y el tercer valor es el swap disponible para uso el cual es 3070.

A partir de los resultados anteriores, puedes decir que el estado de la memoria es bueno ya que no se utiliza ningún swap, por lo tanto, mientras hablamos del mismo, descubramos que nos puede enseñar el directorio de proc acerca del comando swap.

$ cat /proc/swaps

swaps

Este comando muestra el tamaño del swap y cuánto está en uso:

$ cat /proc/sys/vm/swappiness

swappiness

O usando el comando sysctl:

$ echo 50 > /proc/sys/vm/swappiness

O usando el comando sysctl:

$ sudo sysctl -w vm.swappiness=50

Cambiar el valor de swappiness utilizando los comandos anteriores no es permanente, tienes que escribirlo en el archivo /etc/sysctl.conf de esta manera:

$ nano /etc/sysctl.conf

vm.swappiness=50

Persistir la swappiness

¡¡Genial!!

El nivel de swap mide la posibilidad de transferir un proceso desde la memoria al swap.

Elegir el valor exacto de swappiness para tu sistema requiere algo de experimentación para elegir el mejor valor para su servidor.

 


Gestión de memoria virtual con vmstat

Otro comando importante utilizado en la gestión de procesos de Linux es vmstat. El comando vmstat proporciona un informe resumido acerca de la memoria, procesos y paginación.

$ vmstat -a

La opción -a se utiliza para obtener todos los procesos activos e inactivos.

comando vmstat

Y esta es la columna de salida importante de este comando:

si:                          La cantidad intercambiada hacia el disco.

so:                         La cantidad intercambiada fuera del disco.

bi:                         La cantidad envió para dispositivos de bloque.

bo:                       La cantidad obtenida de los dispositivos de bloque.

us:                         La hora del usuario.

sy:                        La hora del sistema.

id:                           El tiempo inactivo.

Nuestra principal preocupación son las columnas ( si ) y (so), en las que la columna ( si ) muestra las entradas de página, mientras que la columna (so) muestra las salidas de página.

Una mejor forma de ver estos valores es ver la salida con una opción de delay:

$ vmstat 2 5

retraso vmstat

Donde 2 es la demora en segundos y 5 es la cantidad de veces que se llama vmstat. Esto mostrará cinco actualizaciones del comando y todos los datos se presentan en kilobytes.

La entrada de página ( si ) ocurre cuando inicias una aplicación y la información está paginada. La salida de la página (so) ocurre cuando el kernel está liberando memoria.

 


Carga del sistema y comando top

En la administración de procesos de Linux, el comando top te brinda una lista de los procesos en ejecución y ofrece información acerca del uso del CPU y la memoria; el resultado es un dato en tiempo real.

Si tiene un sistema dual core puede tener el primer núcleo al 40 por ciento y el segundo núcleo al 70 por ciento, en este caso, el comando top puede mostrar un resultado combinado del 110 por ciento, pero no conocerá los valores individuales para cada núcleo.

$ top -c

top comando

Usamos la opción -c para mostrar la línea de comando o la ruta ejecutable detrás de ese proceso.

Puede presionar la tecla 1 mientras miras las estadísticas del comando top para mostrar los estados individuales de la CPU.

Estado de la CPU individual

Ten en cuenta que ciertos procesos se generan como procesos secundarios, verás múltiples procesos para el mismo programa, como httpd y PHP-fpm.

No debes confiar solo en el comando top, debes revisar otros recursos antes de realizar una acción.

 

Monitoring Disk I/O with iotop

El sistema empieza a ralentizarse como resultado de las altas actividades del disco, por lo que es importante supervisarlas. Esto significa que debes averiguar qué procesos o usuarios causan esta actividad del disco.

El comando iotop en la administración de procesos de Linux nos ayuda a monitorear las E/S de disco en tiempo real. Puedes instalarlo si no lo tiene:

$ yum install iotop

Ejecutar iotop sin ninguna opción dará como resultado una lista de todos los procesos.

Para ver los procesos que causan la actividad del disco, debe usar la opción -o:

$ iotop -o

comando iotop

De esta forma puedes saber fácilmente qué programa está afectando el sistema.

 

comando ps

Ya hemos hablado sobre el comando ps anteriormente en una publicación y de cómo ordenar los procesos por uso de memoria y uso de CPU.

 


Control del estado del sistema con iostat y lsof

el comando iostat te proporciona un informe de utilización de la CPU; se puede usar con la opción -c para mostrar el informe de utilización de la CPU.

$ iostat -c

comando iostat

El resultado de salida es fácil de entender, pero si el sistema está ocupado, verá qué % iowait aumenta. Esto significa que el servidor está transfiriendo o copiando muchos archivos.

Con este comando, puedes verificar las operaciones de lectura y escritura, por lo que debe tener un conocimiento sólido del contenido de tu disco y tomar la decisión correcta.

Además, el comando lsof se usa para enumerar los archivos abiertos:

lsof comando

El comando lsof muestra qué ejecutable usa el archivo, el ID del proceso, el usuario y el nombre del archivo abierto.

 

Cálculo de la carga del sistema

Calcular la carga del sistema es muy importante en la gestión de procesos de Linux. La carga del sistema es la cantidad de procesamiento que está utilizando el sistema actualmente. No es la manera perfecta de medir el rendimiento del sistema, pero te proporciona cierta evidencia.

La carga se calcula así:

Carga real = Carga total (tiempo de actividad) / Nº de CPUs

Puedes calcular el tiempo de actividad revisando el comando uptime o el comando top:

$ uptime

uptime Comando

$ top

La carga del servidor se muestra en 1, 5 y 15 minutos.

Como puedes ver, la carga promedio es 0.00 en el primer minuto, 0.01 en el quinto minuto y 0.05 en quince minutos.

Cuando la carga aumenta, los procesadores se ponen en cola, y si hay muchos núcleos de procesador, la carga se distribuye por igual a través de los núcleos del servidor para equilibrar el trabajo.

Puede decir que el promedio de una buena carga es aproximadamente 1. Esto no significa que si la carga excede 1 hay un problema, pero si comienzas a ver números más altos durante mucho tiempo, eso significa que existe una carga alta y hay un problema.

 


pgrep y systemctl

Puede obtener la ID del proceso utilizando el comando pgrep seguido del nombre del servicio.

$ pgrep servicename

pgrep Comando

Este comando muestra el ID del proceso o PID.

Ten en cuenta que si este comando muestra más de un ID de proceso, como httpd o SSH, el ID de proceso más pequeño es el ID del proceso principal.

Por otro lado, puede usar el comando systemctl para obtener el PID principal de esta manera:

$ systemctl status <service_name>.service

systemctl Comando

Hay más formas de obtener el ID de proceso requerido o el ID de proceso principal, pero este es fácil y directo.

 

Administrar servicios con systemd

Si vamos a hablar sobre la gestión de procesos de Linux, deberíamos echarle un vistazo a systemd. El systemd es responsable de controlar cómo los servicios se gestionan en sistemas Linux modernos como CentOS 7.

Puedes iniciar, detener y verificar el estado de esta manera:


En lugar de usar chkconfig comando para habilitar y deshabilitar un servicio durante el arranque, puedes usar el comando systemctl:


Systemd también incluye su propia versión del comando top, y para mostrar los procesos que están asociados con un servicio específico, puede usar el comando system- cgtop de esta manera:

$ systemd-cgtop

systemd-cgtop

Como puedes ver, todos los procesos asociados, la ruta, el número de tareas, el%   de la CPU utilizada, la asignación de memoria y las entradas y salidas relacionadas.

Este comando se puede usar para generar una lista recursiva de contenido de servicio como este:

$ systemd-cgls

systemd-cgls

Este comando nos brinda información muy útil que puede usarse para actuar.

 

Procesos Nice y Renice

El valor del proceso nice es una indicación numérica que pertenece al proceso y la forma en que lucha por la CPU.

Un alto valor indica una baja prioridad para el proceso, así qué calculas que bueno será para otros usuarios, y de aquí proviene el nombre.

El rango agradable es de -20 a +19.

El comando nice establece el valor nice para un proceso en el momento de la creación, mientras que el comando renice ajusta el valor adelante.

$ nice n 5 ./myscript

Este comando aumenta el valor agradable, lo que significa una prioridad más baja en 5.

$ sudo renice -5 2213

Además, este comando disminuye el valor nice lo que significa mayor prioridad y el número (2213) es el PID.

renice comando

Puedes aumentar el valor nice (prioridad más baja) pero no puedes reducirlo (prior alta prioridad) mientras que el usuario root puede hacer ambas cosas.

 

Enviando la señal terminación

Para matar un servicio o aplicación que causa un problema, puede emitir una señal de terminación (SIGTERM). Puedes revisar la publicación anterior sobre señales y trabajos.

$ kill process ID

Este método se llama muerte segura. Sin embargo, dependiendo de su situación, tal vez necesites forzar un servicio o aplicación para que termine de esta manera:

$ kill -1 process ID

A veces, la muerte segura y la recarga no logran nada, puedes enviar la señal de matar SIGKILL usando la opción -9 que se llama muerte forzada.

$ kill -9 process ID

No hay operaciones de limpieza o salida segura con este comando y no se prefiere. Sin embargo, puedes hacer algo más apropiado usando el Comando pkill.

$ pkill -9 serviceName

pkill comando

Y puede usar el comando pgrep para asegurarse de que se eliminen todos los procesos asociados.

$ pgrep serviceName

pkill -9

Espero que tengas una buena idea sobre la gestión de procesos de Linux y sobre cómo hacer una buena acción para que el sistema se mantenga saludable.

Gracias.

Mokhtar Ebrahim
Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *