Categories: Linux

Limitar uso de memória de um usuário ou grupo sem programas adicionais

Uma forma simples e nativa de controlar o uso de Memoria RAM por usuário ou grupo é usando  o arquivo /etc/security/limits.conf

Note que esse arquivo é um canivete suiço, da pra limitar quantidade de logins, uso de cpu, memoria, processos simultâneos etc. porém aqui vamos abordar especificamente o uso da memoria ram.

Para aplicar o limite, basta inserir uma linha ao final deste arquivo na sintaxe abaixo:

Limitando um único usuário em 1Gb de ram:

usuario      hard    as              1024000

Para limitar um grupo:

@grupo      hard    as              1024000

Observações: Para grupo, o “@” faz parte da sintaxe e deve ser mantido. O limite de memória é em KB, para saber o valor exato, da pra jogar na busca do google “1 GB in Kb”

O melhor de tudo é que não precisa reiniciar e nem restartar nenhum serviço.

Para testar se está funcionando segue um fonte em C que pode ser sado para simular o uso de memória ram

/*
 * xmalloc.c
 *
 * Just allocate a chunk of memory
 * and make sure it gets written, so that
 * the demand-paging mechanism of Linux actually
 * has to find physical pages or swap for it
 *
 * Vangelis Koukis <vkoukis@cslab.ece.ntua.gr>
 * July 2007
 */ 
  
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> 

int main(int argc, char *argv[])
{
	char *p;
	long i;
	size_t n; 

	/* I'm too bored to do proper cmdline parsing */
	if (argc != 2 || atol(argv[1]) <= 0 ) {
		fprintf(stderr, "I'm bored... Give me the size of the memory chunk in KB\n");
		return 1;
	}
	n = 1024 * atol(argv[1]);

	if (! (p = malloc(n))) {
		perror("malloc failed");
		return 2;
	} 

 	/* Temp, just want to check malloc */
	printf("Malloc was successful\n");
	return 0; 

	/* Touch all of the buffer, to make sure it gets allocated */
	for (i = 0; i < n; i++)
		p[i] = 'A';


	printf("Allocated and touched buffer, sleeping for 60 sec...\n");
	sleep(60);
	printf("Done!\n"); 

	return 0;
}

Quando for limitar um usuário, temos que ter em mente que o próprio bash consome uma porção da memoria ram, então é normal que setando em 1Gb o programa retorne “erro ao alocar memoria” testando com, por exemplo, 990Mb;

 

Felipe Braz

Recent Posts

Como Criar Rede Wi-Fi de Visitante em Roteadores Ax3000t com OpenWRT

Depois que comprei os roteadores ax3000t e finalmente consegui instalar o openwrt neles. Agora chegou…

3 meses ago

Como criar e validar credenciais seguras em Ansible sem dor de cabeça – Guia passo a passo

A criação e validação de credenciais seguras em ansible sempre gera um pouco de dor…

2 anos ago

Magento e o mistério do servidor somente-leitura

Dia desses, um dos meus servidores entrou com o sistema de arquivos / em modo…

5 anos ago

Localização de arquivos .desktop no ubuntu

O launcher do ubuntu não fornece muitas opções me relação aos icones, muitas vezes apps…

5 anos ago

Ordenar array por tamanho em php

Três meios diferentes para a mesma finalidade: Usando funções nativas do PHP (recomendado): array_multisort(array_map('strlen', $array),…

6 anos ago

Adicionar suporte a rc.local no ubuntu 16.04 ou superior

Embora um script muito útil para tarefas de inicialização de um servidor, essa funcionalidade se…

6 anos ago