• linux redhat7.x对于ulimit的管理


    问题描述:RedHat 7.4设置系统最大文件打开数(open files)的时候,对系统启动的进程不生效。

    实际问题:程序需要将系统打开最大文件数的限制修改为100000,自己手动通过ulimit - n 100000命令设置,但是未生效。

    问题分析:RedHat 7.0以上的系统设置需要修改配置文件,Redhat 7.0以下的系统则不存在该问题。

    1:记录未修改之前的ulimit值
     
     
     
    2:修改配置文件
      
    vim  /etc/security/limits.conf   在后面添加
    *      soft    nofile  100000
    *      hard    nofile  100000
    *      soft    nproc   65535
    *      hard    nproc   65535
    重启机器,修改 /etc/security/limits.conf 里的配置后,需重启机器才能生效
          
     
    3:查看修改后的ulimit值
     
     
      
    4:在这里看起来一切都很正常,也许一不小心就入坑了。为了对比现象,需要安装两个nginx,一个源码安装,一个yum安装
          
    源码安装:(简单安装,只是为了验证和测试,不指定安装路径,默认是在/usr/local/nginx下)     
    wget http://nginx.org/download/nginx-1.8.1.tar.gz
    tar -zxvf nginx-1.8.1.tar.gz
    cd nginx-1.8.1
    ./configure
    make && make install
    yum安装
    yum -y install nginx

      

    5:现象
     
    1)先启动源码编译的nginx,并查看进程号及limit值,如下
     
    启动nginx:   /usr/local/nginx/sbin/nginx
    查看进程:     ps -ef |grep nginx
    查看某个进程的limit值: cat /proc/进程号/limits
         
     
     
    2)yum安装nginx启动
     
    启动方法:systemctl start nginx.service ,然后查看进程号及其limit值,如下:
                 
     
     
    到这里问题就来了,为什么通过systemctl启动的nginx对limit的设置不生效 ?????
    然后查看了1号进程的limit值( cat /proc/1/limits ),发现也是对修改/etc/security/limits.conf文件里的最大文件打开数和最大进程数没有生效
     
    6:原因
     
    仔细查看/etc/security/limits.conf文件的注释,说明了对系统服务不生效
     
     
    7:解决办法
     
    在Centos7系统中,使用Systemd替代了之前的SysV。/etc/security/limits.conf文件的配置作用域缩小了。/etc/security/limits.conf的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。因此登录用户的限制,通过/etc/security/limits.conf与/etc/security/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是用户实例使用的。
     
    vim /etc/systemd/system.conf
    DefaultLimitNOFILE=100000
    DefaultLimitNPROC=65535
    重启后,systemctl start nginx启动,然后根号进程号查看资源限制,得到
     
     
    8:用到的相关命令
        
    1)查看当前进程的最大可以打开的文件数
     
         cat /proc/进程ID/limits
     
    2)查看当前进程实时打开的文件数
     
         lsof -p PID |wc -l
     
    3)查看系统总限制打开文件的最大数量
     
         cat /proc/sys/fs/file-max
     
    注:若设置不生效,查看包含的目录下的配置文件是否覆盖,如/etc/security/limits.d/下的文件是否覆盖了/etc/security/limits.conf设置的值 。
     
    心得:在这里奉劝大家和自己,当在Linux上操作某些命令或者修改某些配置文件的时候,无论自己在以前的版本多么熟悉,当新版本的Linux修改配置文件不生效时,一定要去man,或者查看修改的文件的注释或者说明,系统开发者不会无缘无故放一段注意在文件里的。

     

  • 相关阅读:
    HD1205吃糖果(鸽巢、抽屉原理)
    POJ3628 Bookshelf 2(01背包+dfs)
    poj1631Bridging signals(最长单调递增子序列 nlgn)
    【转】KMP算法
    Intern Day1
    记 MINIEYE C++应用开发实习生技术一面
    解决Mac下CLion无法编译运行多个cpp的问题
    记赛目科技C++开发工程师实习生技术面
    Git总结
    Docker学习大纲
  • 原文地址:https://www.cnblogs.com/despotic/p/12155168.html
Copyright © 2020-2023  润新知