• 由登录服务器时ulimit配置报错,也谈下ulimit配置


    最近在登录开发机时,有报错如下:

    -bash:  cannot modify limit: Operation not permitted

     

    一定是哪个地方有ulimit设置,想想看,用户登录或用户su命令切换时,系统会调用以下脚本: 

        /etc/profile.d/file 
        /etc/profile 
        /etc/bashrc 
        /lebyzhao/.bashrc 
        /lebyzhao/.bash_profile 

    可能是这里面有ulimit -n的配置,检查一下,果然在/etc/profile中,有行ulimit -n 65535

    当你以lebyzhao登录时,你不是root,没有权限执行,才显示了上面的报错。

    这里注释掉/etc/profile这行即无报错。

    ulimit -n配置很关键,所以这里在啰嗦一下,因为这个和当前登录session、用户甚至用户组limits配置相关,有时看起来很蹊跷。

    除了应用ulimit -n, 也可以甚至是需要修改linux的软硬件限制文件/etc/security/limits.conf:

        如添加如下代码: 
        * soft nofile 20480
        * hard nofile 20480
        所有用户打开的文件数被限制为65535。简单解释下这里命令格式是users type item value,users是以符号@开头的用户名或组名(不加@测试也可以),*表示所有用户,type设置为hard or soft。item指定想限制的资源,如cpu,core nofile nproc or maxlogins,value则就是相应的限制值。

        这样登录的时候pam就会从从limits.conf中设置上限(当然,ulimit命令可以在低于上限的范围内再行设置)

      -H 设置硬资源限制,一旦设置不能增加。 ulimit – Hs 64;限制硬资源,线程栈大小为 64K。

      -S 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。 ulimit – Sn 32;限制软资源,32 个文件描述符。如果超过了这个上限,-S 你会得到下面的错误提示:

    ulimit: open files: cannot modify limit: Invalid argument

        另外,网上看,好像有内核还提供了设置接口:/proc/sys/fs /nr_open,大家有兴趣可以在搜索看下。

      

        总之,我们用ulimit -n 命令在本次shell session中、服务器进程启动(脚本)时、用户登录如/etc/profile里进行设置,或者设置limits.conf,都可以达到你的目的,场景和优劣也很明显。

     

        如果你还有兴趣:我们用sudo limit -n 65536测试设置时,会提示找不到命令,原因是ulimit 和cd等一样,是内核内建的指令,并不是/usr/sbin等下面的二进制程序命令。那请问一下,如果非要在自己(非root)登录后设置,是否可以这样:sudo sh -c "ulimit -n 65535"?结合sudo、用户来看,也不难理解可行与否了。

  • 相关阅读:
    java连接远程linux的redis
    Mac下Sublime Text 3安装配置
    矩阵覆盖
    Mac下配置Tomcat
    用 O(1) 时间检测整数 n 是否是 2 的幂次。
    快速编程之禅
    如何在centos 7.4 上安装 python 3.6
    大众点评实时监控系统CAT的那些坑
    如何在 centos 7.3 上安装 caffe 深度学习工具
    为什么中文编程项目失败率特别高?
  • 原文地址:https://www.cnblogs.com/leby/p/4451658.html
Copyright © 2020-2023  润新知