Sobes.tech
Middle

O que você sabe sobre os ulimits em sistemas Linux?

sobes.tech IA

Resposta da IA

ulimits (limites de utilizador) no Linux é um mecanismo do núcleo que permite estabelecer restrições no consumo de recursos do sistema para utilizadores, grupos ou processos. Ajudam a evitar o esgotamento de recursos por um processo, o que pode levar à instabilidade ou falha do sistema.

Categorias principais de restrições:

  • Número de processos: Número máximo de processos filhos que um utilizador ou processo pode criar.
  • Tamanho de ficheiros: Tamanho máximo de um ficheiro que um utilizador ou processo pode criar.
  • Número de ficheiros abertos: Número máximo de descritores de ficheiros que um processo pode abrir.
  • Tamanho da pilha: Tamanho máximo da pilha para processos.
  • Utilização de memória: Restrições na memória virtual (tamanho do residente, tamanho do segmento de dados, etc.).
  • Prioridade de planeamento: Prioridade máxima com que um processo pode trabalhar.
  • Bloqueios de ficheiros: Número de bloqueios de ficheiros.

A gestão de ulimits é feita através de:

  1. O comando ulimit (integrado no shell): Permite ver e definir limites para o shell atual e os seus processos filhos.

    # Ver todos os limites atuais (soft e hard)
    ulimit -a
    
    # Ver o limite no número de ficheiros abertos (soft)
    ulimit -n
    
    # Definir limite soft no número de ficheiros abertos para 4096
    ulimit -n 4096
    
    # Definir limite hard no número de ficheiros abertos para 8192 (apenas para root ou se o limite soft for inferior)
    ulimit -Hn 8192
    
  2. Ficheiro /etc/security/limits.conf: Permite estabelecer limites permanentes para utilizadores específicos, grupos ou todos os utilizadores (*) ao nível do sistema. As alterações entram em vigor após o próximo login do utilizador.

    # Sintaxe: <domínio> <tipo> <item> <valor>
    
    # domínio: utilizador (@grupo, *)
    # tipo: soft | hard
    # item: core, nproc, nofile, virtualmem, etc.
    # valor: valor do limite
    
    # Limite para o utilizador 'devops' no número de ficheiros abertos (soft=4096, hard=8192)
    devops soft nofile 4096
    devops hard nofile 8192
    
    # Limite para o grupo 'developers' no número de processos (hard=1000)
    @developers hard nproc 1000
    
    # Limite no tamanho do ficheiro para todos os utilizadores (hard=ilimitado)
    * hard fsize unlimited
    
  3. Chamadas ao sistema (por exemplo, setrlimit, getrlimit): Os programas podem estabelecer ou obter os seus próprios limites durante a execução. Os processos sem privilégios só podem reduzir os seus limites rígidos ou modificar os limites suaves até ao valor do limite rígido. O root pode estabelecer quaisquer limites.

Compreender ulimits é fundamental para depurar problemas de recursos (por exemplo, "muitos ficheiros abertos"), prevenir ataques DoS ao nível de recursos e ajustar o desempenho das aplicações. É especialmente importante ao iniciar serviços, contêineres ou bases de dados.