Ulimit – Ilimitando sua administração

Hoje, teremos como objetivo esclarecer como impôr limites a nível de processos em execução, quotas de memória, quotas de espaço em stack, número de arquivos abertos, etc.

Isto pode ser útil para evitar que um usuário ou serviço utilize sem limites o recurso do hardware. Com as políticas ulimit devidamente aplicadas estamos protegidos de gargalos de recursos, e consequentemente, crash do sistema.

Um detalhe importante sobre o ulimit é que ele se relaciona com a shell que você utiliza. Porém, mesmo executando uma nova shell diferente dentro da sua shell padrão, os limites se aplicam, pois a nova shell é um processo child daquela que impõe os limites, herdando tudo da mesma, com exceção do pid.

Portando para burlar o ulimit, o utilizador deve programar uma shell do zero e posteriormente setá-la como shell padrão. Isso porque o administrador pode aplicar os limites a todas as shells disponíveis no sistema. A única maneira de burlar é desenvolvendo uma shell que o administrador não setou tais limites. Desta forma, temos que as regras ulimit são seguras.

 
Os limites disponíveis

Abaixo a lista de possíveis limites:

  • Tamanho de arquivos core
  • Tamanho do segmento de stack
  • Tamanho do segmento de dados
  • Memória alocável
  • Número máximo de processos
  • Tamanho de arquivos
  • Tamanho máximo dos pipes
  • Número de filedescriptors (arquivos abertos)
  • Tempo de utilização de cpu
  • Tamanho máximo de memória virtual

Core – Tamanho máximo de um arquivo cujo contéudo de memória de um processo é escrito para um arquivo quando este crasha.

Stack – Espaço máximo que um utilizador pode ocupar na stack ou pilha de dados. A stack é utilizada para passar parâmetros nas chamadas de sub-rotinas, ou para guardar o estado da máquina em sistemas multi-programadas.

Seg. Dados – É o tamanho máximo que o segmento de dados de processos do usuário pode ocupar. Um processo tem um mapa de memória, e este divide-se em zonas, e uma delas é o segmento de dados.

Memória – Alocação máxima de memória que o usuário pode utilizar.

Processos – É o numero máximo de processos que o usuário pode ter, isto é, o número máximo de programas em execução que o utilizador pode ter. Ou seja, processos child da shell, porque no caso do X-Windows, este número não tem limite.

Tamanho de Arquivos – É o tamanho maximo que um arquivo pode ter, claro que isto também é limitado pelo espaço livre no sistema de arquivos e o tipo de sistema de arquivos definido, uma vez que, dependendo do sistema de arquivos utilizado, temos um limite por arquivo. Por exemplo: FAT32 possui o limite de aproximadamente 2GB/arquivo.
Tamanho Pipes – Tamanho máximo que um pipe pode ter. Pipe é um mecanismo de
comunicaçao entre processos da mesma família.

Número Filedescriptor – Número máximo de filedescriptors que podem estar abertos.
Filedescriptor é uma ligação entre um processo e um arquivo em disco. De uma forma mais simples, esta opção permite impor um número máximo de arquivos abertos.

Tempo de CPU – Tempo máximo que o usuário tem para utilizar o CPU. Desta forma, definimos o tempo a partir do qual ele não pode utilizar mais o processador.

Tamanho Memória Virtual – Tamanho máximo de memória virtual que o usuário pode utilizar.