我可以在Python中以编程方式访问ulimit和sysctl.conf变量吗?

时间:2017-06-12 15:43:48

标签: python linux

我想验证是否正确设置了大量Linux主机。目前我可以通过grepping sysctl.conf并执行ulimit:

等命令来实现
[username@hostname ~]$ tail -2 /etc/sysctl.conf
fs.file-max = 65536
vm.max_map_count = 262144
[username@hostname ~]$ ulimit -u
4096

我想编写一个脚本来收集以下所有数据:

  • 最大文件描述符
  • 最大线程
  • 最大地图数量

当然,我可以通过自动化我的手动过程来实现这一点,但是有更多编程方式在Python中获取这些数据吗?我宁愿知道操作系统报告的值是什么,而不是配置文件中的内容 - 以防万一有差异。

1 个答案:

答案 0 :(得分:3)

您可以从两个位置获取此信息:

  • 获取ulimit信息,请使用resource module;过程限制是resource.RLIMIT_NPROC常量。

    import resource
    
    nproc_soft, nproc_hard = resource.getrlimit(resource.RLIMIT_NPROC)
    
  • 要读取当前sysctl.conf值,请阅读/proc/sys文件系统。 sysctl.conf中的选项将一对一映射到该系统中的路径,只需将.替换为路径分隔符:

    # read the current setting for fs.file-max
    with open('/proc/sys/fs/file-max') as f:
        file_max = int(f.read())
    
    # thread count limit, kernel.threads-max
    with open('/proc/sys/kernel/threads-max') as f:
        threads_max = int(f.read())
    
    # map count limit, vm.max_map_count
    with open('/proc/sys/vm/max_map_count') as f:
        max_map_count = int(f.read())