Gestión de recursos asignados a procesos

De Manuais Informática - IES San Clemente.
Revisión del 18:40 11 dic 2017 de Javierfp (discusión | contribuciones)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Ir a la navegación Ir a la búsqueda

Para los administradores de sistemas el control de recursos es algo fundamental a la hora de planificar, diseñar y administrar los sistemas informáticos.

Si de algún modo fuera posible definir límites de uso de recursos asociados a determinados procesos, o grupos de procesos, tendríamos un campo de control de nuestro sistema operativo muy amplio. Este aspecto es efectivamente gestionado por systemd a través de los units de tipo slice.

Mediante la definición de unit files para este tipo de elemento podremos establecer límites de uso de recursos del sistema informático que pueden ser asignados, y aplicados consecuentemente, a los procesos.

Vamos a ver un ejemplo

Definición de un unit de tipo slice

Empezamos definiendo una unit de tipo slice en /etc/systemd/system/www.slice

[Unit]
Description=Limitación de Recursos para servidores web
DefaultDependencies=no
Before=slices.target
[Slice]
CPUWeight=1000
MemoryMax=2G

La sección fundamental a la hora de definir el unit file es [Slice], en ella se establecen los límites de recursos que se aplicarán a los procesos a los que se le aplique. Los valores indicados en esa sección

  • CPUWeight=1000: esta directiva, cuyo valor puede estar comprendido entre 1 y 10000, indica la asignación de CPU que tendrán todos los procesos a los que se aplique el slice. En este caso estamos asignando el 10% de la CPU de forma dedicada a los procesos afectados por el slice.
  • MemoryMax=2G: esta directiva establece el límite máximo de memoria que podrán utilizar los procesos afectados por el slice, en este caso 2GB, por tanto no podrán, en conjunto, todos los procesos a los que se aplique el slice, consumir más que esa cantidad de memoria

Hay otras muchas más opciones y directivas para establecer limitaciones de recursos utilizando este mecanismo.

Aplicación del slice a un service

Ahora vamos a aplicar el slice anterior a un service, en este caso al service que regula la ejecución del servidor web nginx.

Si no está instalado el servicio lo instalamos con

apt install nginx

tras lo cual editamos su unit de tipo service mediante el comando

systemctl edit --full nginx.service

el comando anterior creará una copia del unit file nginx.service original, ubicado en /lib/systemd/system/nginx.service, en /etc/systemd/system/nginx.service. De este modo se aplica la versión editada, pero se mantiene la original por si es necesario recuperar el estado de definición original del service.

En la sección [Service] añadimos la línea

Slice=www.slice

Recargamos los unit files

systemctl daemon-reload

Reiniciamos el service afectado

systemctl restart nginx.service

Para comprobar que efectivamente se está aplicando la limitación de recursos ejecutamos

systemctl status nginx.service

Lo cual mostraría la siguiente salida

nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/etc/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-12-05 18:57:29 CET; 5min ago
     Docs: man:nginx(8)
  Process: 1089 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (
  Process: 1095 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS
  Process: 1092 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=
 Main PID: 1096 (nginx)
    Tasks: 3 (limit: 4915)
    CGroup: /www.slice/nginx.service
           ├─1096 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ├─1097 nginx: worker process
           └─1098 nginx: worker process

notar como en la captura anterior aparece la línea

Cgroup: /www.slice/nginx.service

la cual indica que el service nginx.service está siendo afectado por la restricción definida en www.slice.

NOTA

CGroups, Control Groups, es un sistema de gestión de recursos del kernel.

Volver

JavierFP 17:44 11 dec 2017 (CET)