Como posso limitar o consumo de memória do mysqld?

0

Alto consumo de memória do MySQL

Recentemente eu migrei do servidor Debian para o servidor Ubuntu e notei que o consumo de memória mysqld no Ubuntu Server é ridiculamente alto por pouco ou nenhum uso ...

Soluções?

Eu queria saber se há alguma maneira de limitar esse consumo de memória, já que ele coloca meu servidor em uma posição perigosamente indiferente?

    
por NerdOfCode 13.03.2018 / 19:08

1 resposta

2

Eu usaria grupos de controle para realizar o que você está pedindo.

Por favor, leia antes de seguir estas instruções: Eu li no site de documentação do RedHat que libcgroups foi preterido recentemente. RedHat fornece um guia para criar grupos de controle com systemd aqui .

Além disso, nos métodos descritos abaixo, * text * indica um número ou nome de arquivo a ser definido pelo usuário.

Método 1: libcgroups (aparentemente obsoleto)

Você pode instalar o libcgroups, que contém uma série de utilitários para criar cgroups como cgcreate e cgclassify, digitando sudo apt install libcgroups . Depois de instalado, faça o seguinte:

  • Crie um cgroup chamado sqlgroup (ou o que você quiser chamá-lo)
    • Digite cgcreate -g memory,cpu:sqlgroup
  • Definir limite de memória.
    • cgset -r memory.limit_in_bytes=$((*mathExpressionForDesiredLimit*)) sqlgroup
  • Associe um novo grupo ao processo desejado para controlar.
    • Se o processo estiver em execução no momento, use cgclassify digitando cgclassify -g memory,cpu:sqlgroup $(*PID of mysql process*)
    • Se o processo não estiver em execução, você pode usar o cgexec digitando cgexec cpu,memory:sqlgroup *processName* *additional arguments*

Método dois: configuração manual

Você também pode fazer isso manualmente sem instalar pacotes adicionais usando o seguinte ( Nota: você deve ter o systemd 232 ou posterior. systemctl --version | grep systemd fornece as informações da versão atual):

  • %código%. Isto cria uma pasta sob [...] / cgroup / memory, que especifica que o cgroup controlará a memória. Observação: altere o nome do grupo para algo que corresponda ao processo que você deseja restringir. Você pode nomear qualquer coisa. No método anterior, descrevi que o nome do grupo era sqlgroup.
  • Defina o limite de memória para o processo criando um arquivo na pasta do nome do grupo que você criou e que contenha o limite de memória em bytes. Isso pode ser feito usando: mkdir /sys/fs/cgroup/memory/groupname . Não altere o nome da memória.limit_in_bytes.
  • Mova o PID do processo que você deseja restringir para o arquivo cgroup.procs. Pode ser criado com echo amount_in_bytes > /sys/fs/cgroup/memory/groupname/memory.limit_in_bytes . Nota: Se vários processos com diferentes PIDs forem restritos, você terá que inserir cada PID no arquivo cpgroup.procs manualmente.

Opções de configuração mais avançadas em relação aos cgroups podem ser encontradas aqui .

    
por Saul Kapruac 13.03.2018 / 21:41