Tenemos un servidor Xeon local que ejecuta Ubuntu LTS y que se comparte entre unos pocos desarrolladores. Cada desarrollador inicia sesión con su usuario y ejecuta varias cargas de trabajo en él. El problema que experimentamos es que cuando en algún momento se ejecuta una carga de trabajo de CPU o almacenamiento extensa, los otros usuarios no pueden trabajar en la máquina y el shell deja de responder.
Intentamos pedirle al usuario que limitara la utilización de su CPU durante la construcción y resolvió los problemas de la CPU, pero aparentemente, la utilización de E/S del disco sigue siendo un problema. Estamos usando almacenamiento SSD.
El uso de una máquina virtual en el servidor no es una posibilidad, ya que no queremos limitar los recursos. solo queremos asegurarnos de que otros usuarios no pierdan recursos.
Qué opciones tenemos ?
Respuesta1
¿Qué tan flexible es la modificación de las cargas de trabajo? Hay utilidades como nice que pueden limitar la prioridad de los procesos y restringir la cantidad de porción que pueden obtener.
https://www.geeksforgeeks.org/nice-and-renice-command-in-linux-with-examples/#
Pero como ya ha notado, esta solución no es perfecta porque el problema aquí probablemente será que cuando solo hay un usuario conectado, no podrá utilizar el sistema en su máximo potencial. Y ese puede ser simplemente un problema nuevo.
Disk IO, otros han preguntado y han encontrado soluciones como la respuesta aquíhttps://unix.stackexchange.com/questions/536007/cgroups-throttle-per-user-disk-io-bandwidth-on-linux
Me temo que probablemente no habrá una solución perfecta, es por eso que cosas como la virtualización se han vuelto tan populares para hacer un uso más eficiente de los recursos compartidos.
Como todo lo relacionado con Linux, es probable que existan más soluciones (y tal vez incluso sistemas diseñados para aprovecharlas)
En mi humilde opinión, hacer esto correctamente probablemente requeriría cierta programación a nivel del kernel, o alguna interfaz para usar las opciones de programación que ya existen, no conozco ninguna. ...Pero me he equivocado antes, así que si alguien más aporta una solución, ¡yo también aprenderé! Entonces la respuesta puede ser que no hay respuesta sin aceptar concesiones.