我编写了一个服务,为一台机器配置可以管理单个端口的 selinux 用户。我正在尝试为该机器预置 1000 个用户,但 selinux 在用户 450 左右慢慢停止(每小时仅处理 6 个用户,这是我开始时的一半。我有 2 个 2.5ghz这台机器上有 cpu 和 4 GB RAM,我第一次尝试几个小时后就用完了 RAM(只有 1 GB)。并最终会陷入停滞。
所以我的问题是,为什么当我添加更多用户时,selinux 会变得更慢(特别是 semanage user 命令)?我在 selinux 邮件列表档案中看到一些关于内存泄漏的提及,但它似乎只出现在深奥的地方。
根据请求,这里是我调用的所有 selinux 命令(我知道如果没有上下文,它没有多大意义),但我认为它与发布我的整个脚本无关。
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)])
运行大约 40 小时后,我的用户数量达到了 560 个。但是,它已经稳定在每小时 6-7 个用户,没有沉没,也没有崩溃,所以也许它已经是最好的了。