INFORMACIÓN DEL SISTEMA
Tipo y versión del sistema operativo
*Ubuntu Linux 20.04.4
Virtualmin versión 6.17-3*
Soy el único propietario de mi servidor y de todos los servidores virtuales. Quiero limitar los recursos que utilizan los servidores. Actualmente configuro el uso de RAM editando el archivo limites.conf de esta manera:
oneofmyuser memlock duro 1024
Ahora estoy confundido con la opción de CPU que hay en los códigos de ejemplo:
#Where:
#<domain> can be:
# - a user name
# - a group name, with @group syntax
# - the wildcard *, for default entry
# - the wildcard %, can be also used with %group syntax,
# for maxlogin limit
# - NOTE: group and wildcard limits are not applied to root.
# To apply a limit to the root user, <domain> must be
# the literal username root.
#
#<type> can have the two values:
# - "soft" for enforcing the soft limits
# - "hard" for enforcing hard limits
#
#<item> can be one of the following:
# - core - limits the core file size (KB)
# - data - max data size (KB)
# - fsize - maximum filesize (KB)
# - memlock - max locked-in-memory address space (KB)
# - nofile - max number of open file descriptors
# - rss - max resident set size (KB)
# - stack - max stack size (KB)
# - cpu - max CPU time (MIN)
# - nproc - max number of processes
# - as - address space limit (KB)
# - maxlogins - max number of logins for this user
# - maxsyslogins - max number of logins on the system
# - priority - the priority to run user process with
# - locks - max number of file locks the user can hold
# - sigpending - max number of pending signals
# - msgqueue - max memory used by POSIX message queues (bytes)
# - nice - max nice priority allowed to raise to values: [-20, 19]
# - rtprio - max realtime priority
# - chroot - change root to directory (Debian-specific)
¿Cómo puedo limitar a mi usuario a usar solo 1 o 2 núcleos? Existe un valor fundamental, pero ¿debería estar en Kb? ¿Quiero limitarme a, por ejemplo, 2 núcleos? Entonces, ¿cuántos kb? ¿También para CPU? ¿Cuáles son los valores ideales para estas opciones para un servidor normal con un sitio de WordPress normal?
Respuesta1
En Linux, puedes anclar un proceso a una CPU con taskset
. (Ver man taskset
). (Ver tambiénhttps://unix.stackexchange.com/questions/425065/linux-how-to-know-what-processes-are-pinned-to-what-core)
También puede usar cpulimit
(ver man cpulimit
), que usa grupos de control para establecer un límite de uso de CPU donde 100 sería el equivalente a una CPU.
Para utilizar cualquiera de estos, deberá averiguar qué proceso se inicia para el usuario y agregar los comandos anteriores. No estoy familiarizado con Virtualmin, pero al ser de código abierto sospecho que podrás descubrir dónde inicia estos procesos con bastante facilidad, buscando el código fuente.
El tiempo de CPU limits.conf
es el tiempo de CPU en minutos, como se muestra en la columna Tiempo, por top
lo que es solo una medida de cuánto tiempo se permite ejecutar exclusivamente el proceso.
El valor "núcleo" en limits.conf (ver man limits.conf
) se refiere al tamaño de un archivo de volcado de núcleo, que es un volcado que puede habilitar de un proceso si falla, para depurarlo.
El trasfondo de esto es que Linux fue diseñado para hacer exactamente lo contrario - distribuir tareas entre CPU - y es extremadamente bueno en eso. La única razón para limitar razonablemente las tareas a una CPU en una máquina de múltiples núcleos es hacer algo con una sincronización perfecta, o ataques de sincronización.
Otras opciones son bloquear el sistema operativo en ciertos núcleos desde el gestor de arranque, o puede emular CPU singulares o ejecutar contenedores anclados a ciertas CPU.