selinux user add tornando-se progressivamente mais lento

2

Eu escrevi um serviço que configura uma máquina com usuários selinux que podem gerenciar uma única porta. Eu estou tentando pré-semear essa máquina com 1000 usuários, mas o selinux está rastejando até parar em torno do usuário 450 (processando apenas 6 usuários por hora, o que é metade do que era quando eu comecei. Eu tenho 2 2.5ghz CPU e 4 GB de RAM sobre essas máquinas. A primeira vez que eu tentei isso fiquei sem RAM depois de algumas horas (só tinha 1 GB). Agora parece que eu não estou ficando sem RAM, mas está ficando mais lento e acabará por parar.

Então, minha pergunta é: por que o selinux está ficando mais lento (especificamente o comando de usuário semanage) quando eu adiciono mais usuários? Eu vi algumas menções no arquivo da lista de discussão do selinux sobre um vazamento de memória, mas isso só parecia estar em lugares esotéricos.

Por solicitação, aqui estão todos os comandos do selinux que eu chamo (eu sei que não faz muito sentido sem contexto), mas eu não acho relevante postar meu roteiro inteiro.

    subprocess.check_call(['make', '-f', '/usr/share/selinux/devel/Makefile'])
    subprocess.check_call(['checkmodule', '-M', '-m', '-o', mod_file, te_file])
    result = subprocess.check_output(['semodule_package', '-m', mod_file, '-o', pp_file])
    subprocess.check_call(['semodule', '-r', mod_name])
    return str(subprocess.check_output(['semanage', 'port', '-l', '-C', '-n'])).splitlines()
    subprocess.check_call(["semanage", "port", "-a", "-t", selinux_portname, "-p", "tcp", str(port)])
    subprocess.check_call(["chcon", "--reference", "%s/users/%s" % (selinux_context_dir, template_user), "%s/users/%s" % (selinux_context_dir, selinux_user) ])
    subprocess.check_call(["semanage", "user", "-a", "-R", selinux_role, selinux_user ])
    subprocess.check_call(["semanage", "login", "-a", "-s", selinux_user, user])
    subprocess.check_call(["restorecon", "-RF", "/home/%s" % (user)])

Depois de correr por cerca de 40 horas, tenho até 560 usuários. Mas, está nivelando 6-7 usuários por hora, não afundando e não bombardeando, então talvez seja tão bom quanto é possível.

    
por Peter Turner 31.08.2016 / 05:38

0 respostas