Intercambiar pines de script bash uso de memoria de htop

1

Implementé un truco para agregar espacio de intercambio a un VPS que de otra manera no me permitiría usar swaponpara crear un archivo.

Antes de agregar y ejecutar el script, seguí los pasos descritos aquí. y resumido a continuación:

  1. Primero creo el archivo de intercambio: sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k
  2. Entonces sudo mkswap /swapfile.
  3. El siguiente paso generalmente hubiera sido hacer un sudo swapon /swapfile. Sin embargo, el VPS que estoy usando no coincide con eso, así que encontré esta publicación. Afirmaba que podía usar el siguiente script como solución alternativa.

Vea abajo:

#!/bin/bash
SWAP="${1:-512}"
NEW="$[SWAP*1024]"; TEMP="${NEW//?/ }"; OLD="${TEMP:1}0"
umount /proc/meminfo 2> /dev/null
sed "/^Swap\(Total\|Free\):/s,$OLD,$NEW," /proc/meminfo > /etc/fake_meminfo
mount --bind /etc/fake_meminfo /proc/meminfo

Para más contexto, el proceso se describe en detalle en esta respuesta . (En su mayoría solo se alimenta con cuchara al ejecutar un script bash).

Todo parece estar bien, sin embargo, cuando miro en htop (o free -mpara el caso); el uso de memoria permanece en el valor que tenía cuando ejecuté el script y el espacio de intercambio utilizado permanece en cero. Esto es independientemente del proceso que ejecute en el servidor. Mi conocimiento de lo que está sucediendo en la asignación de memoria es muy limitado (esta es realmente la primera vez que lo hago). ¿Alguien podría decirme si esto tiene sentido, dado el script que estoy ejecutando, y por qué?

neanderslob
fuente

Respuestas:

4

Has entendido mal lo que esa publicación significa "intercambio falso". Hay algunos programas que por diversas razones insisten en que un sistema tenga espacio de intercambio habilitado ( tos Oracle tos ). Si no es así, el programa, o al menos su instalador, se queja. Por supuesto, con la base de datos mencionada anteriormente hay formas de decirle que continúe de todos modos, pero la gente a menudo no las conoce.

El "intercambio falso" que encontraste es una solución alternativa. Es una forma de mentir a esos programas, y el intercambio de simulación está habilitado. El intercambio es una mentira. No hay intercambio real. Pero el programa cree que sí, así que no se queja. La solución también radica en free, etc., y también se basa en todos los demás valores /proc/meminfo. (Honestamente: si encontrara esto en uso en un sistema que estaba usando, mucho menos administrando, usaría términos mucho más severos que "solución". Términos que no serían adecuados para una conversación educada).

La respuesta de Tante sobre la otra pregunta es probablemente correcta: OpenVZ no admite el intercambio en máquinas virtuales. No hay alternativa a swapon. Hace un montón de comprobaciones, pero luego llama a la llamada al sistema del núcleo swapon. Si la llamada al sistema no es compatible, ya está. No puedes hacerlo. Lo siento.

Dependiendo del problema real que intente resolver, existen otros enfoques que pueden funcionar:

  • Si un proceso en particular necesita trabajar con una gran cantidad de datos, mmapprobablemente todavía funcione. O use algoritmos más eficientes en espacio.
  • Asigne (o solicite / pague al proveedor) más memoria a la VM. Posiblemente habilite el intercambio en el host.
  • Cambie a una solución de virtualización diferente, o para ejecutar en el metal desnudo.
  • Probablemente podría ejecutar User Mode Linux dentro de su contenedor OpenVZ. Dentro de esa instancia de UML, probablemente pueda habilitar el intercambio. Espero que el rendimiento sea terrible.
derobert
fuente
Bueno, eso parece bastante definitivo. Muchas gracias por clavarlo para mí.
neanderslob
4

Si entiendo ese script correctamente, en realidad no permite el intercambio de ninguna manera. En su lugar, simplemente pretende que el sistema tiene permuta mediante la sustitución de /proc/meminfomodo que freey htopcreer que el sistema tiene intercambio, pero el núcleo es de ninguna manera poder utilizar este intercambio falso. Si observa el script, puede notar que no se menciona ningún archivo o partición de intercambio en ninguna parte, por lo que no hay nada que el núcleo pueda usar.

Así que esto:

el espacio de intercambio permanece en cero

Es exactamente lo que esperaría que sucediera.

Martin von Wittich
fuente
Gracias por la respuesta. Creo que omití alguna información crucial (o tal vez no haga la diferencia). Antes de agregar y ejecutar el script, seguí los pasos descritos aquí. Primero creo el archivo de intercambio: sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k luego sudo mkswap /swapfile. El siguiente paso generalmente habría sido hacer una sudo swapon /swapfile publicación que leí que decía que este script sería una solución alternativa al paso swapon. ¿Tendría algún sentido? ¡Gracias de nuevo!
neanderslob
1
No, todavía no tiene ningún sentido. ddy mkswapsimplemente escriba en un archivo: solo el swaponpaso le indicaría al núcleo que use ese archivo como intercambio. Si su núcleo no es compatible swapon, entonces no tiene suerte. Ningún script de shell te ayudará allí.
Martin von Wittich
Bueno, en ese caso, creo que es hora de dejar de lado estas tonterías para descansar y simplemente buscar algo más de memoria. Muchas gracias por su ayuda.
neanderslob