https://manuais.iessanclemente.net/index.php?title=Gesti%C3%B3n_de_recursos_asignados_a_procesos&feed=atom&action=historyGestión de recursos asignados a procesos - Historial de revisiones2024-03-29T14:41:44ZHistorial de revisiones de esta página en el wikiMediaWiki 1.36.2https://manuais.iessanclemente.net/index.php?title=Gesti%C3%B3n_de_recursos_asignados_a_procesos&diff=63574&oldid=prevJavierfp en 17:40 11 dic 20172017-12-11T17:40:52Z<p></p>
<p><b>Página nueva</b></p><div><br />
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.<br />
<br />
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'''.<br />
<br />
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.<br />
<br />
Vamos a ver un ejemplo<br />
<br />
=== Definición de un unit de tipo slice ===<br />
<br />
Empezamos definiendo una unit de tipo slice en '''/etc/systemd/system/www.slice'''<br />
<br />
<pre><br />
[Unit]<br />
Description=Limitación de Recursos para servidores web<br />
DefaultDependencies=no<br />
Before=slices.target<br />
[Slice]<br />
CPUWeight<nowiki>=</nowiki>1000<br />
MemoryMax<nowiki>=2G</nowiki><br />
</pre><br />
<br />
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<br />
<br />
* '''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.<br />
* '''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<br />
<br />
Hay otras muchas más opciones y directivas para establecer limitaciones de recursos utilizando este mecanismo.<br />
<br />
=== Aplicación del slice a un service ===<br />
<br />
Ahora vamos a aplicar el slice anterior a un service, en este caso al service que regula la ejecución del servidor web nginx.<br />
<br />
Si no está instalado el servicio lo instalamos con<br />
<br />
<pre>apt install nginx</pre><br />
<br />
tras lo cual editamos su unit de tipo service mediante el comando<br />
<br />
<pre>systemctl edit --full nginx.service</pre><br />
<br />
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.<br />
<br />
En la sección ['''Service'''] añadimos la línea<br />
<br />
<pre>Slice=www.slice</pre><br />
<br />
Recargamos los unit files<br />
<br />
<pre>systemctl daemon-reload</pre><br />
<br />
Reiniciamos el service afectado<br />
<br />
<pre>systemctl restart nginx.service</pre><br />
<br />
Para comprobar que efectivamente se está aplicando la limitación de recursos ejecutamos<br />
<br />
<pre>systemctl status nginx.service</pre><br />
<br />
Lo cual mostraría la siguiente salida<br />
<br />
<pre><br />
nginx.service - A high performance web server and a reverse proxy server<br />
Loaded: loaded (/etc/systemd/system/nginx.service; enabled; vendor preset: enabled)<br />
Active: active (running) since Tue 2017-12-05 18:57:29 CET; 5min ago<br />
Docs: man:nginx(8)<br />
Process: 1089 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (<br />
Process: 1095 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS<br />
Process: 1092 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=<br />
Main PID: 1096 (nginx)<br />
Tasks: 3 (limit: 4915)<br />
CGroup: /www.slice/nginx.service<br />
├─1096 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;<br />
├─1097 nginx: worker process<br />
└─1098 nginx: worker process<br />
</pre><br />
<br />
notar como en la captura anterior aparece la línea<br />
<br />
<pre>Cgroup: /www.slice/nginx.service</pre><br />
<br />
la cual indica que el service nginx.service está siendo afectado por la restricción definida en www.slice.<br />
<br />
'''NOTA'''<br />
<br />
'''CGroups''', Control Groups, es un sistema de gestión de recursos del kernel.<br />
<br />
[[Gestión del Sistema con Systemd|Volver]]<br />
<br />
JavierFP 17:44 11 dec 2017 (CET)</div>Javierfp