• Linux下ulimit关于open files的配置


    操作系统默认只能打开1024个文件,打开的文件超过这个数发现程序会有“too many open files”的错误,1024对于大数据系统来说显然是不够的,如果不设置,基本上整个大数据系统是“不可用的”,根本不能用于生产环境。

    在centos 5/6 等版本中,资源限制的配置可以在 /etc/security/limits.conf 设置,针对root/user等各个用户或者*代表所有用户来设置。

    当然,/etc/security/limits.d/ 中可以配置,系统是先加载limits.conf然后按照英文字母顺序加载limits.d目录下的配置文件,后加载配置覆盖之前的配置。 一个配置示例如下:

    *     soft   nofile    65535

    *     hard   nofile    65536

    *     soft   nproc     65535

    *     hard   nproc     65535

    *     soft   core      65535

    *     hard   core      65535

    配置方法如下:

    echo "* soft nofile 65535" >> /etc/security/limits.conf

    echo "* hard nofile 65535" >> /etc/security/limits.conf

    echo "* soft nproc 65535" >> /etc/security/limits.conf

    echo "* hard nproc 65535" >> /etc/security/limits.conf

    在bash中,有个ulimit命令,提供了对shell及该shell启动的进程的可用资源控制。主要包括打开文件描述符数量、用户的最大进程数量、coredump文件的大小等。

    在CentOS 7 / RHEL 7的系统中,使用Systemd替代了之前的SysV,因此 /etc/security/limits.conf 文件的配置作用域缩小了一些。limits.conf这里的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。登录用户的限制,与上面讲的一样,通过 /etc/security/limits.conf 和 limits.d 来配置即可。

    对于systemd service的资源限制的配置

    全局的配置,放在文件 /etc/systemd/system.conf 和 /etc/systemd/user.conf。 同时,也会加载两个对应的目录中的所有.conf文件 /etc/systemd/system.conf.d/*.conf 和 /etc/systemd/user.conf.d/*.conf

    其中,system.conf 是系统实例使用的,user.conf用户实例使用的。一般的sevice,使用system.conf中的配置即可。systemd.conf.d/*.conf中配置会覆盖system.conf。配置参数如下:

    DefaultLimitCORE=infinity

    DefaultLimitNOFILE=65535

    DefaultLimitNPROC=65535

    注意:修改了system.conf后,需要重启系统才会生效。

    针对单个Service,也可以设置,以nginx为例。

    编辑 /usr/lib/systemd/system/nginx.service 文件,或者 /usr/lib/systemd/system/nginx.service.d/my-limit.conf 文件,做如下配置:

    [Service]

    LimitCORE=infinity

    LimitNOFILE=100000

    LimitNPROC=100000

    然后运行如下命令,才能生效。

    systemctl daemon-reload

    systemctl restart nginx.service

    查看一个进程的limit设置:cat /proc/YOUR-PID/limits

    例如我的一个nginx service的配置效果:

    cat /proc/$(cat /var/run/nginx.pid)/limits

    顺便提一下,CentOS7自带的/etc/security/limits.d/20-nproc.conf,里面默认设置了非root用户的最大进程数为4096,limit.conf的配置会被limit.d目录中的配置覆盖,这点需要注意,针对普通用户,需要修改20-nproc.conf。

  • 相关阅读:
    笔试强训(三十四)
    【SQL性能优化】反范式设计:3NF有什么不足,为什么有时候需要反范式设计?
    如何将文字转换成语音?分享两款实用软件
    软考系列(系统架构师)- 2017年系统架构师软考案例分析考点
    NI USRP RIO软件无线电
    【网络协议详解】——FTP系统协议(学习笔记)
    基于有偏距离权值(Weighted cubic O-MOMS with warping)三次O-MOMS插值理论的图像超分辨重构研究-附Matlab程序
    appium+华为鸿蒙手机自动化(环境配置)
    引擎入门 | Unity UI简介–第1部分(7)
    什么是重载和重写,它们有什么区别?
  • 原文地址:https://blog.csdn.net/rendongxingzhe/article/details/126107998