Cómo limitar el consumo de CPU y memoria en Google Chrome y en otros aplicativos en Linux

Hola a todos,

En este artículo, vamos a abordar un tema que podría interesar a muchos: cómo gestionar o limitar los recursos de nuestros programas en Linux.

¿Pero por qué querríamos hacer esto? Es posible que, como muchos, tu programa más utilizado sea un navegador web, ya sea Chrome o Firefox. Estos navegadores, por lo general, consumen una gran cantidad de recursos, especialmente memoria. Cuantas más pestañas tengas abiertas, más recursos se requieren. Además, utilizan una cantidad considerable de CPU cuando procesan páginas que exigen un alto rendimiento, como Instagram o YouTube.

El problema de no limitar los recursos que asignamos a nuestro navegador es que este puede consumir todo el rendimiento disponible de nuestro sistema. Esto es especialmente problemático en laptops, que tienden a calentarse mucho. Cuando permitimos que el navegador utilice todos los recursos, puede hacer que varios núcleos de nuestro CPU funcionen al 100% durante largos períodos.

Como resultado, la temperatura del equipo puede aumentar significativamente, lo que podría acortar la vida útil de nuestro hardware y dañar la pasta térmica del CPU más rápidamente.

Ahora, surge una pregunta importante: ¿realmente necesitamos que el navegador tenga acceso a todos nuestros recursos para disfrutar de una buena experiencia?

La respuesta es que no necesariamente. Es posible encontrar un equilibrio entre un rendimiento óptimo para nuestras necesidades y el consumo de recursos.

Una herramienta eficaz para lograr esto es el uso de cgroups (grupos de control), que nos permite gestionar y limitar los recursos asignados a diferentes procesos en nuestro sistema Linux.

Creo que es hora de ponernos a jugar.

Para simplificar la configuración, nosotros no trabajaremos directamente con cgroups. En su lugar, nos ayudaremos con systemd, un sistema de inicio y gestión de servicios ampliamente utilizado en las distribuciones modernas de Linux.

Systemd facilita la administración de procesos y proporciona funciones avanzadas como la gestión de servicios, la supervisión de su estado y la configuración de límites de recursos a través de cgroups, lo que lo convierte en una herramienta ideal para nuestro propósito.

Un ejemplo de cómo usar systemd para limitar los recursos de Google Chrome sería el siguiente comando:

systemd-run --user --property=CPUQuota=480% --property=MemoryMax=4G -- google-chrome

Este comando ejecuta Google Chrome con límites de recursos establecidos.

La opción más fácil de comprender es --property=MemoryMax, que nos permite definir la cantidad máxima de memoria que queremos que el proceso utilice.

Para un uso general, Google Chrome suele funcionar sin problemas con 4 GB de RAM. Sin embargo, esto dependerá de cuántas pestañas utilices en el navegador; en general, a más pestañas abiertas, más memoria necesitarás.

En cuanto al límite de CPU, ¿qué significa ese 480%?

Este valor se basa en mi configuración, que tiene un CPU de 4 núcleos físicos pero cada núcleo puede manejar 2 hilos simultáneamente. Por lo tanto, aunque físicamente tiene 4 núcleos, el sistema operativo los ve como 8 núcleos lógicos.

Conociendo esto, he decidido permitir que cada núcleo utilice un máximo del 60% de su capacidad.

Para calcular el porcentaje total, utilizamos la siguiente fórmula:

número de núcleos × 100 × límite

Que en este caso sería:

8 × 100 × 0.60 = 480

Tanto en lo que respecta a la memoria como a los límites que quieras establecer para tu CPU, es fundamental realizar pruebas con tu navegador para verificar si se comporta de manera eficiente dentro de las limitaciones que definas.

Esto dependerá del uso que le des al navegador.

Te recomiendo que, en cada prueba, abras YouTube e Instagram y reproduzcas algunos videos. Observa si hay interrupciones en el sonido o en la reproducción del video.

Si todo funciona sin inconvenientes, puedes concluir que has logrado una configuración óptima, o bien que has asignado más recursos de los que realmente necesita Chrome.

Si este es el caso, no te preocupes; asumiré que has destinado el máximo de recursos que deseas que consuma Chrome.

Ejecutar Google Chrome desde el lanzador de aplicaciones

Para finalizar, ¿cómo podemos ejecutar Google Chrome sin necesidad de hacerlo desde la terminal y hacerlo disponible para todos los usuarios desde el lanzador de aplicaciones de escritorio?

Para lograrlo, modificaremos directamente el archivo:

/usr/share/applications/google-chrome.desktop

Deberás cambiar todas las líneas que comienzan con:

Exec=google-chrome-stable %U

Reemplazándolas por la siguiente línea:

Exec=systemd-run --user --property=CPUQuota=480% -- google-chrome-stable %U

Con este ajuste, todos los usuarios podrán acceder a Google Chrome con los límites de recursos que hemos configurado.

Una consideración importante

Quisiera hacer una última mención importante: todos los archivos que modifiquen en la dirección /usr/share/applications/ serán sobrescritos si la aplicación se actualiza.

Por lo tanto, es recomendable utilizar la ruta:

~/.local/share/applications

para realizar sus modificaciones.

Espero que esta información les sea de mucha ayuda y que disfruten de mi contenido tanto como yo disfruto al escribirlo.

¡Un saludo!


Referencia:

systemd Resource Control

Paso a Paso: Emulador Android x86 para Ejecutar Apps con Arquitectura ARM

En muchas ocasiones, surge la necesidad de ejecutar aplicaciones con arquitectura ARM en un emulador de Android para estudiar su comportamiento o realizar ingeniería inversa. Sin embargo, nos encontramos con la dificultad de que nuestros equipos, basados en arquitectura x86, no pueden ejecutar aplicaciones ARM de manera nativa. Afortunadamente, desde 2020, las herramientas oficiales de Google han abordado este problema, permitiendo la ejecución de binarios ARM en emuladores de Android. Puedes consultar más información al respecto en el siguiente enlace: Actualizaciones del emulador de Android.

En este artículo, te guiaré paso a paso sobre cómo configurar el emulador desde cero en un sistema operativo Linux. Sin embargo, es importante destacar que el proceso es totalmente compatible con cualquier sistema operativo. Finalmente, también aprenderás cómo instalar archivos APK en tu emulador. Sin más preámbulos, ¡empecemos!

Descarga y Preparación de Command Line Tools

Lo primero que necesitarás es descargar las herramientas de línea de comandos de Android. Puedes obtenerlas buscando el archivo commandlinetools-linux-11076708_latest.zip en el siguiente enlace: Descargar herramientas de línea de comandos de Android.

Una vez que hayas finalizado la descarga, crea una carpeta con el nombre que prefieras; por ejemplo, «android». Coloca el archivo ZIP que descargaste dentro de esa carpeta. A continuación, puedes utilizar el siguiente comando para descomprimirlo:

unzip commandlinetools-linux-11076708_latest.zip

Ahora para que los comandos funcionen correctamente Google nos exige una estructura de ficheros como la siguiente: android/cmdline-tools/{version} y lo podemos realizar por consola de la siguiente manera:

mkdir cmdline-tools/11076708
cd    cmdline-tools
mv bin lib NOTICE.txt source.properties 11076708

Descarga de la Imagen del Sistema y Plataformas

Para mis propósitos, optaré por la imagen system-images;android-30;google_apis_playstore;x86, ya que incluye todo lo necesario para el análisis que planeo llevar a cabo en el futuro. Esta imagen cuenta con la API 30, la cual permite ejecutar aplicaciones ARM. A continuación, te mostraré cómo buscar las imágenes disponibles y descargarlas:

cd 11076708/bin
# para buscar
./sdkmanager --list | grep "system-images;"
./sdkmanager --list | grep "platforms;"
# para instalar
./sdkmanager "system-images;android-30;google_apis_playstore;x86"
./sdkmanager "platforms;android-30"
./sdkmanager "platform-tools"

Creación y Gestión del Dispositivo Virtual (AVD)

Con esto, solo nos queda crear nuestro dispositivo virtual. A continuación, te proporciono los comandos necesarios para llevar a cabo este proceso:

# creamos el dispositivo
./avdmanager create avd --name "android-v11-api-30" --package "system-images;android-30;google_apis_playstore;x86"
# verificamos si se ha creado
./avdmanager list avd
# si deseas eliminarlo puedes utilizar este comando, yo no lo haré
./avdmanager delete avd --name "android-v11-api-30"

Ejecución del Emulador

Para ejecutar nuestro emulador, solo necesitamos regresar a la carpeta que creamos inicialmente, llamada «android», y ejecutar el siguiente comando:

./emulator/emulator @android-v11-api-30

Instalación y Gestión de APKs con ADB

¡Felicitaciones! Ahora, como se prometió, veamos cómo instalar cualquier archivo APK. Para hacerlo, utilizaremos ADB (Android Debug Bridge) de la siguiente manera:

# listar los dispositivos android (fisicos y virtuales)
./platform-tools/adb devices
# instalar el apk en nuestro dispositivo virtual
./platform-tools/adb install myapp.apk
# un plus, con este comando podemos entrar a la terminal de android
./platform-tools/adb shell

Cierre y Comentarios

Ahora todo depende de ti. Si tienes alguna duda, puedes dejarla directamente en los comentarios. Espero que te diviertas estudiando tanto como yo disfruto escribiendo. Un saludo.

¡Bienvenido al mundo de Alpine Linux! Guía paso a paso para nuevos usuarios

Alpine Linux es una distribución Linux ligera y segura, diseñada para ser pequeña, rápida y eficiente. Es ideal para dispositivos con recursos limitados como una Raspberry Pi. Está construida con musl libc y BusyBox para reducir el tamaño de las imágenes y mantener la seguridad.

En los últimos años, Alpine Linux ha ganado popularidad entre desarrolladores y administradores de sistemas debido a su enfoque minimalista y alta seguridad. Su tamaño reducido la hace perfecta para la virtualización, contenedores y dispositivos empotrados, convirtiéndola en una excelente opción para entornos de contenedores como Docker en la nube.

En este post, nos centraremos en la instalación y configuración de Alpine Linux, así como en la instalación de aplicaciones utilizando el gestor de paquetes apk.

Para empezar, necesitaremos la imagen de Alpine que se puede descargar desde el siguiente enlace: www.alpinelinux.org/downloads/

En mi caso, he descargado la siguiente: alpine-standard-3.19.1-x86_64.iso, que corresponde a la versión estándar 3.19.1 de Alpine para arquitecturas x86-64.

Asumiré que saben arrancar el sistema desde un DVD o, si lo hacen desde una máquina virtual, desde el propio ISO.


Inicio de sesión inicial

Una vez iniciado el sistema, se solicitará un nombre de usuario para acceder a la terminal de control:

user:     root
password: 

Una vez en el sistema, simplemente necesitamos usar el comando setup-alpine para configurar nuestra instalación:

setup-alpine

Nos solicitará lo siguiente, te dejo unas respuestas de ejemplo:

keymap:         es       # configuración de tu teclado
layout:         es
hostname:       localhost
interface:      eth0
dhcp:           dhcp
manual network: n        # automáticamente configura tu red
root password:  password_here
time zone:      Europe/Madrid # utiliza el que mejor se ajuste a ti
proxy:          none
NTP:            chrony
apk mirror:     c        # activamos repositorio de la comunidad
apk mirror:     1        # guardamos
setup a user:   username
password:       password_here
ssh key:        none
ssh server:     openssh
disk & install: sda      # en este punto debes seleccionar tu disco
modo:           sys      # formato modo clásico ext4

Ahora te preguntará si aceptas que se borre todo tu disco, si estás seguro responde con y:

WARN: Erase the above disk(s) and continue? y

Una vez finalice el proceso, que suele ser muy rápido, sólo necesitamos retirar el disco y reiniciar el sistema:

shutdown -r now

Configuración de permisos y Sudo

Una vez en el sistema, simplemente ingresamos nuestro usuario y procedemos a realizar las configuraciones finales.

Con esto, Alpine está completamente funcional, pero para agregar un poco más de diversión, vamos a trabajar en la configuración de los permisos de administrador de nuestros usuarios, ya que por defecto nuestro usuario no tiene privilegios de administrador en el sistema.

En Linux, por lo general, cuando quieres permitir que un usuario ejecute comandos de administrador, se utiliza el comando sudo. Sin embargo, este no viene por defecto en Alpine, así que procedemos a instalarlo.

Cambiamos de usuario al usuario root para poder realizar este proceso:

su root

Ahora procederemos a instalar los siguientes paquetes, incluido un editor de texto que personalmente me gusta utilizar, vim:

apk add sudo vim

Ya podemos regresar con nuestro usuario, simplemente necesitamos ejecutar lo siguiente:

exit
id -u -n

El comando id -u -n lo utilizamos solo para asegurarnos de que estamos con nuestro usuario y no con root.

Ha llegado el momento de comprobar si nuestro usuario ya puede ejecutar comandos como administrador:

sudo ls

Oh, qué mal. El administrador de tu dispositivo se dará cuenta de que has intentado ejecutar un comando de administrador sin autorización. Vamos a solucionar este problema. Como nosotros también somos administradores, nos daremos permiso para utilizar sudo a todos los usuarios que pertenezcan al grupo wheel, que es un grupo común en Linux para definir quién puede utilizar el comando sudo, es decir, quién es administrador del sistema.

Si queremos verificar en qué grupos se encuentra nuestro usuario, podemos ejecutar el siguiente comando:

id -G -n

Muy probablemente ya estemos en el grupo wheel y no podemos ejecutar el comando sudo porque no está configurado para que los usuarios del grupo wheel puedan utilizarlo. Por lo tanto, procedemos a cambiar de nuevo al usuario root y realizamos la siguiente configuración:

su root
chmod u+w /etc/sudoers
vim /etc/sudoers

El editor de texto que utilizo en el último comando es vim. Este post no está dedicado a él, así que si no sabes cómo utilizarlo, más adelante publicaré un post dedicado al mismo. En caso contrario, utiliza el editor con el que te sientas más cómodo y busca al final del archivo la siguiente línea:

# %wheel ALL=(ALL:ALL) ALL

Descoméntala y guarda el cambio, debería quedar de la siguiente manera:

%wheel ALL=(ALL:ALL) ALL

Ahora simplemente vuelve a tu usuario y volvemos a validar sudo:

exit
id -u -n
sudo ls

¡Felicitaciones si has llegado a este punto! Has aprendido mucho más de lo que imaginas en la administración de sistemas Linux. Ahora solo te queda seguir explorando y convertirte en un experto cada día más. Espero que hayas disfrutado tanto este post como yo disfruto enseñando. ¡Hasta el próximo artículo!

No pienses que me he olvidado, para apagar el sistema solo usa el siguiente comando:

sudo shutdown now