Troque os pinos do script de bash o uso de memória do htop

1

Eu implantei um hack para adicionar espaço de troca a um VPS que, de outra forma, não me permitia usar o swapon para criar um arquivo.

Antes de adicionar e executar o script, segui as etapas descrito aqui. e resumido abaixo:

  1. Primeiro, crio o arquivo de troca: sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k
  2. Em seguida, sudo mkswap /swapfile .
  3. O próximo passo normalmente seria fazer um sudo swapon /swapfile . No entanto, o VPS que estou usando não combina com isso, então eu encontrei este post. Isso alegou que eu poderia usar o seguinte script como uma solução alternativa.

Veja abaixo:

#!/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 mais contexto, o processo é descrito em detalhes nesta resposta . (É principalmente apenas alimentando-se com colher em um script bash.)

Tudo parece estar bem, no entanto, quando eu olho no htop (ou em free -m para esse assunto); o uso de memória permanece em qualquer valor em que estava quando eu executei o script e o espaço de swap usado permanece em zero. Isso é independente de qualquer processo que eu execute no servidor. Meu conhecimento do que está acontecendo na alocação de memória é muito limitado (essa é realmente a primeira vez que eu a conto). Alguém poderia me dizer se isso faz sentido, dado o script que estou executando e por quê?

    
por neanderslob 12.11.2013 / 22:08

2 respostas

4

Você entendeu mal o que esse post significa por "troca falsa". Existem alguns programas que, por várias razões, insistem em um sistema com espaço de troca ativado ( cough Oracle cough ). Se não for, o programa - ou pelo menos seu instalador - reclama. É claro que com o banco de dados mencionado anteriormente, há maneiras de dizer que ele continue de qualquer maneira, mas as pessoas geralmente não os conhecem.

A "troca falsa" encontrada é uma solução alternativa. É uma maneira de mentir para esses programas e fingir que a troca está ativada. A troca é uma mentira. Não há troca real. Mas o programa acredita que existe, então não reclama. A solução alternativa também é free , etc., e também é sobre todos os outros valores em /proc/meminfo . (Honestamente: se eu achasse isso em uso em um sistema que eu estava usando - muito menos administração - eu usaria termos muito mais duros do que "solução alternativa". Termos que não seriam adequados para uma conversa educada.)

A resposta de Tante sobre a outra questão provavelmente está correta: o OpenVZ não suporta swap em VMs. Não há alternativa para swapon . Ele faz um monte de verificações, mas chama o swapon syscall do kernel. Se o syscall não for suportado, você está pronto. Você não pode fazer isso. Desculpe.

Dependendo do problema real que você está tentando resolver, existem outras abordagens que podem funcionar:

  • Se um processo específico precisar trabalhar com uma quantidade enorme de dados, mmap provavelmente ainda funcionará. Ou use mais algoritmos com espaço eficiente.
  • Aloque (ou peça / pague ao provedor) mais memória para a VM. Possivelmente habilitar swap no host.
  • Mude para uma solução de virtualização diferente ou para executar em bare-metal.
  • Você provavelmente poderia executar o Modo de usuário Linux dentro do seu contêiner OpenVZ. Dentro dessa instância UML, você provavelmente pode ativar a troca. Eu espero que o desempenho seja terrível.
por 13.11.2013 / 12:52
4

Se eu entendi o script corretamente, ele não permite a troca de maneira alguma. Ao invés disso, ele apenas finge que o sistema tem swap substituindo /proc/meminfo para que free e htop acreditem que o sistema tenha swap, mas o kernel não é capaz de usar essa troca falsa. Se você olhar o script, poderá notar que nenhum arquivo ou partição de troca é mencionado em lugar algum, portanto, não há nada que o kernel possa usar.

Então isso:

swap space remains at zero

É exatamente o que eu esperaria que acontecesse.

    
por 12.11.2013 / 23:07