GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo evitar que un programa específico se intercambie?

Creo que el problema del hipo no es necesariamente causado por el intercambio. Si un programa está reproduciendo algo, Linux debería notarlo y no cambiarlo. Los programas que no hacen mucho son los primeros que se intercambian. Puede verificar si el programa realmente se está intercambiando mirando el RSS /RES campo de ps o superior . RSS es el tamaño del conjunto residente, la memoria física no intercambiada que usa una tarea (en kilobytes).

Creo que lo más probable es que su problema se deba a una programación incorrecta de la CPU y de E/S y un poco de ineficiencia de Rhythmbox que lo hace sensible a las altas cargas del sistema. La prioridad de la CPU se puede cambiar con los comandos nice y Renice . La prioridad de E/S se puede cambiar con el ionice dominio. Solo el superusuario puede usar prioridades altas. También debe saber que los chicos del kernel de Linux están tratando de mejorar la capacidad de respuesta de los sistemas de escritorio con varios parches de baja latencia, por lo que podría considerar usarlos. Uno de ellos es un parche de ~200 líneas escrito por Mike Galbraith que ha impresionado incluso a Linus. La alternativa a este parche es el truco cgroups de Lennart Poettering, que creo que será el predeterminado en Fedora 15.

De todos modos, sin esos parches hay dos opciones:iniciar el programa con una prioridad alta o cambiarlo después. Para la primera opción, podría usar un script contenedor alrededor de Rhythmbox:

#!/bin/sh
# Run Rhytmbox with high CPU and I/O priorities
nice -n -10 ionice -c 1 -n 1 su -l -c rhythmbox alexei

Deberá ejecutarlo como root. Si no desea iniciar sesión como root solo para iniciar esto, puede usar su o sudo .

En cuanto a cambiar la prioridad después, si es demasiado perezoso para iniciar sesión como root para cambiarlo, puede intentar usar un trabajo cron que se ejecuta cada 5 minutos y establece la prioridad de rhythmbox proceso, pero no recomendaría hacer esto:

#!/bin/sh
renice -n -10 -p `pidof rhythmbox`
ionice -c 1 -n 1 -p `pidof rhythmbox`

Respuesta corta:no puedes y no debes.

Hace mucho tiempo, los archivos ejecutables respetaban el sticky bit +t lo que le diría al kernel que no intercambie, pero hoy se ignora.

Si el kernel decide que tiene que intercambiar, seguramente tiene una razón válida. Linux es muy agresivo con el uso de la memoria, porque la RAM inactiva es un recurso desperdiciado.

Si realmente no desea intercambiar, obtenga más RAM o simplemente # swapoff -a (no recomendado, puede inutilizar su sistema si ya tiene problemas).

Shouldn't va cuando estás desarrollando alguna aplicación y no quieres que se intercambie en absoluto. Eche un vistazo a esta publicación en stackoverflow.


Hay varias formas de hacerlo. Puede intentarlo "dice" que Linux funcione menos con intercambio (generalmente):

echo 10 > /proc/sys/vm/swappiness

Desde:https://www.kernel.org/doc/Documentation/sysctl/vm.txt

intercambio

Este control se utiliza para definir la agresividad con la que el kernel intercambiará páginas de memoria. Los valores más altos aumentarán la agresividad, los valores más bajos disminuirán la cantidad de intercambio.

El valor predeterminado es 60.

Otra opción es usar el administrador del kernel de cgroups, esto es específico por proceso, pero tendrá algo de "trabajo" que hacer:respondido aquí:https://unix.stackexchange.com/questions/10214/per-process-swapiness-for -linux#10227


Linux
  1. Cómo borrar un comando específico del historial de Bash en Linux

  2. Cómo excluir directorios específicos de la copia en Linux

  3. Cómo instalar paquetes desde un repositorio específico en Linux

  4. ¿Cómo hacer que un programa sea ejecutable desde cualquier lugar?

  5. ¿Cómo acceder (si es posible) al espacio del kernel desde el espacio del usuario?

Cómo compilar el kernel de Linux desde cero {Guía paso a paso}

Cómo instalar un programa desde la fuente en Linux

Cómo construir el kernel de Linux desde cero

¿Cómo eliminar Swap Space de Centos 7.x?

Cómo compilar el kernel de Linux desde el origen para crear un kernel personalizado

¿Cómo apagar Linux en una fecha y hora específica desde la terminal?