Lancé algo que tomó mucha memoria y ahora todo se retrasa mucho. Supongo que la memoria de todas las aplicaciones se ha cambiado para liberar espacio para el proceso de uso intensivo de memoria, y ahora todo vuelve lentamente a la RAM cuando se accede.
¿Hay alguna manera de mover explícitamente todo lo posible desde el intercambio de vuelta a la RAM? ¿O tal vez no todo, sino solo algunos datos de procesos particulares?
swapoff
si la memoria pasa a nivel bajo: en este caso, el espacio de intercambio seguirá siendo funcional :)Puede sintonizar haciendo eco de algún número entre 0 y 100
/proc/sys/vm/swappiness
.fuente
sysctl
comando en su lugar. En este caso, lo essysctl vm.swappiness=x
.sysctl
comando de nivel superior para la interacción del usuario. El resultado final es el mismo, pero generalmente se prefieren las interfaces de nivel superior para que el usuario interactúe directamente. Es como arrancar el motor haciendo un cortocircuito en los cables de encendido (nivel inferior) en lugar de simplemente girar la llave (nivel superior).Linux hace un buen trabajo administrando la memoria y no debe interponerse en su camino. La configuración de vm.swappiness (mencionada anteriormente) no se interpone en su camino. Es más probable que experimente problemas extraños al hacer las cosas de otra manera.
¿Qué lanzaste que tenía tanta memoria? ¿Se puede sintonizar? Si no tiene sus propias directivas de límite de memoria, también puede consultar ulimit.
fuente
convert -density 200 file.pdf jpegs/file.jpg
. Por alguna razón, usa mucha memoria, pero tienes razón: se puede ajustar. De todos modos, la situación es posible con cualquier aplicación :)convert
tiene el-limit
argumento para controlar su memoria frente al uso del disco, y debe leer sobre ellos. El ajuste-limit memory 512MB
o similar sería bueno. Probablemente también sería bueno especificar un MAGICK_TEMPORARY_PATH explícito y limpiarlo después de que su comando haya terminado.Si tiene la memoria disponible para todas sus aplicaciones, está bien establecer el intercambio en 0 para que las cosas no se intercambien. Por ejemplo, qemu-kvm es un gran objetivo que el VMM debe intercambiar, porque "parece" estar inactivo la mayor parte del tiempo. He visto que hasta el 80% de la memoria de una memoria qemu-kvm se escribe para intercambiar. Las máquinas virtuales que se ejecutan en qemu-kvm dejarán de responder porque se están quedando sin intercambio (aunque el invitado no tiene idea de que esto está sucediendo). La VM invitada pensará que está funcionando de manera excelente, aunque en realidad se está arrastrando terriblemente. Cuando un montón de máquinas virtuales "se despiertan" y comienzan a hacer cosas, puede aumentar el promedio de carga hasta más de 30, incluso en hardware de grado empresarial con memoria y disco rápidos y amplios. Supongo que esto es una falla en el diseño qemu-kvm listo para usar.
Espero que esto ayude a alguien.
fuente
Aconsejaría que no intente superar el subsistema VM en el núcleo. Es EXTREMADAMENTE improbable que realmente tenga suficiente información para tomar mejores decisiones de las que tendrá. Y si lo obligas de alguna manera a hacer lo incorrecto, terminarás haciendo las cosas aún más lentas.
fuente
Si puede reiniciar el sistema, debería hacerlo (y puede llevar mucho menos tiempo que probar cualquier otra solución).
fuente
Para copiar parte de mi respuesta de esta pregunta .
Para que sepas cómo funciona el swappiness sintonizable. Esto funciona diciéndole al subsistema VM que busque páginas para intercambiar cuando el% de memoria asignada para procesar tablas de páginas + valor de intercambio es> 100. Por lo tanto, una configuración de 60 hará que el sistema comience a paginar páginas obsoletas de la tabla de páginas de proceso cuando utiliza más del 40% de la memoria de su sistema. Si desea permitir que sus programas utilicen más memoria a expensas de la memoria caché, querrá reducir el valor de intercambio.
fuente
¿El proceso aún se está ejecutando? Abra una terminal y vea si puede detectar los procesos que se iniciaron. (El nombre de proceso ps aux | grep podría facilitarlo un poco) Utilice kill -9 PID para eliminarlos si todavía se están ejecutando. Ten cuidado con lo que matas. Si no sabes cuál es el proceso, ¡no lo mates! Además, publique la salida de free -m para que podamos ver si todavía está usando mucho intercambio.
Si las cosas siguen funcionando lentamente, es posible que todavía tenga lo que haya lanzado todavía ejecutándose. Nunca desconectaría el intercambio a menos que realmente sepas lo que estás haciendo o te guste vivir al límite. =)
fuente
Creo que no hay una forma realmente buena de forzar el intercambio de datos de Linux del disco a la memoria. Cuando swapoff / swapon es una solución que funciona, pero está sucio y fácilmente puede hacer que su sistema sea inestable. Para los casos en que tenga más datos en el intercambio que memoria libre, será difícil imaginar una política eficiente que Linux pueda emplear para decidir qué datos se moverán a la memoria y qué piezas se guardarán en el disco.
Resumen: solo deje que Linux restaure gradualmente su rendimiento de la manera normal. Su subsistema VM está organizado de tal manera que se esfuerza y se mueve constantemente a un estado equilibrado ideal.
fuente
Vaciar la memoria caché de búferes
Si alguna vez quieres vaciarlos, puedes usar esta cadena de comandos.
Puede indicar al kernel de Linux que deje caer varios aspectos de los elementos en caché cambiando el argumento numérico al comando anterior.
NOTA: limpie la memoria de cosas innecesarias (Kernel 2.6.16 o más reciente). ¡Siempre asegúrese de ejecutar la sincronización primero para eliminar cosas útiles en el disco!
Para liberar pagecache:
Para liberar dentries e inodes:
Para liberar pagecache, dentries e inodes:
Lo anterior está destinado a ejecutarse como root. Si está tratando de hacerlos con sudo, deberá cambiar la sintaxis ligeramente a algo como esto:
fuente