Tabla de contenidos
Debido a una serie de pruebas de rendimiento que querían hacer desde el equipo de aplicaciones, me han preguntado si era posible limitar los recursos de CPU y memoria a nivel global del servidor, un Linux RedHat 7.
Podemos hacerlo con CGROUPS pero para este caso concreto he preferido limitar los recursos mediante parámetros del kernel configurados en grub. Veamos cómo lo he hecho:
En RedHat 7
Si nuestro sistema tiene BIOS
Creamos una máquina virtual con Linux Centos 7 con 1500MB de RAM y 4 CPUs virtuales
Para crear la maquina virtual he utilizado HyperV.
Limitamos el uso de memoria a 512MB y el número de CPUs a 2, editando el fichero /boot/grub2/grub.cfg
Como podemos comprobar, al final he añadido los parámetros mem=512M y nr_cpus=2
Una vez realizados los cambios, rebotamos el servidor y volvemos a comprobar cuánta memoria y cuántos procesadores vemos en el sistema:
Si nuestro sistema tiene UEFI
El procedimiento anterior me ha funcionado correctamente con sistemas con BIOS, sin embargo, tuve que hacer lo mismo en un RedHat 7.6 con UEFI y el procedimiento no es exactamente igual pero sí muy parecido (https://access.redhat.com/solutions/32726):
- Editamos el fichero /etc/sysconfig/grub.
- Añadimos las directivas de limitación de memoria y CPU como hicimos anteriormente.
- Regeneramos el fichero de configuración de grub: grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
[[email protected] sysconfig]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-957.27.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.27.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-0ea1c55e2750436b9c64c7d00397ab7a
Found initrd image: /boot/initramfs-0-rescue-0ea1c55e2750436b9c64c7d00397ab7a.img
done
[[email protected] sysconfig]#
- Rebotamos el servidor y comprobaremos que la memoria y la CPU se han limitado correctamente.
En RedHat 8
Para limitar los recursos de memoria y CPU en Linux RedHat 8, configuraremos el fichero /boot/grub2/grubenv:
[[email protected] ~]# cat /boot/grub2/grubenv
# GRUB Environment Block
saved_entry=062f875ce1af4e47828eb10505496dc0-4.18.0-240.10.1.el8_3.x86_64
kernelopts=root=/dev/mapper/vg00-rootvol ro audit=1 nomodeset crashkernel=auto resume=/dev/mapper/vg00-swapvol rd.lvm.lv=vg00/rootvol rd.lvm.lv=vg00/swapvol biosdevname=0 net.ifnames=0 rhgb quiet transparent_hugepage=never mem=15G
boot_success=0
boot_indeterminate=0
Luego, rebotaremos el servidor.