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
- Digite
- 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*
- Se o processo estiver em execução no momento, use cgclassify digitando
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 .