ulimit详解

前段时间去面试滴滴,面试官问了一些linux相关的问题,其中有一个关于ulimit问题,本人当时也没有给出很详细的回答,在此恶补一下。

ulimit简介
ulimit是bash内键命令,它具有一套参数集,用于为由它生成的shell进程及其子进程的资源使用设置限制。可以使用help ulimit查询手册

ulimit命令使用

      Linux对于每个用户,系统限制其最大进程数。为提高性能,可以根据设备资源情况,设置linux用户的最大进程数
      可以用ulimit - a来显示当前的各种用户进程限制
      下面我把某Linux用户的最大进程数设为10000个
                   ulimit -u 10240
                  对于需要做许多socket连接并使它们处于打开状态的java应用程序而言,
                  最好通过使用ulimit -n xx修改每个进程可打开的文件数,缺省值是1024
                  ulimit -n 4096将每个进程可以打开的文件数目加大到4096,缺省是1024
       其他 建议设置成无限制(unlimited)的一些重要设置是:
                数据段长度:ulimit -d unlimited
                最大内存大小:ulimit -m unlimited
                堆栈大小:ulimit -s unlimited
                cpu时间:ulimit -t unlimited
                虚拟内存:ulimit -v unlimited
        还有一些常用的选项如下:
                ulimit -Hs 64:硬限制资源,线程栈大小为64k
                ulimit -Sn 32:软限制资源,32个文件描述符
                ulimit -a:显示当前所有limit信息
                ulimit -c unlimited:对生成的core文件大小不进行限制
                ulimit -f 2048:限制进程可创建的最大文件大小为2048blocks
                ulimt -i 32:限制最大可加锁内存大小为kbytes
                ulimit -p 512:限制管道缓冲区的大小为512kbytes
                ulimit -u 64:限制用户最多可以使用64个进程
          注意:这个当中的硬限制是实际的限制,而软限制,是warning限制,只会做出warning;其中ulimit命令本身就有分软硬设置,默认显示的是软限制,如果运行ulimit命令修改的时候没有加上的话,就是两个参数一起改变  

ulimit的使用方式及作用范围
在用户的启动脚本里

   如果用户使用的是bash,就可以在用户目录下的.bashrc文件中,加入ulimit -u 64,来限制用户最多可以使用64个进程,此外,可以在于.bashrc功能相当的启动脚本中加入ulimit

应用程序的启动脚本中

  编写个简单的启动脚本startmyapp
      #/bin/sh
      ulimit -n 512
      myapp.sh
   以这个startmyapp启动myapp.sh时,myapp.sh这个脚本打开的文件句柄数不超过512个

直接控制台输入

    [root@web ~]#ulimit -p 512
    限制管道缓冲区为256k

ulimit作为对资源使用限制的一种工作,是有其作用范围的。那么,它限制的对象是单个用户,单个进程,还是整个系统呢?事实上,ulimit限制的是当前shell进程以及其派生的子进程
举例来说,如果用户同时运行了两个shell终端进程,只在其中一个环境中执行了ulimit -s 100,则该shell进程里创建文件的大小收到相应的限制,而同时另一个shell终端包括其上运行的子程序都不会受到其影响
ulimit相关配置文件

主配置文件:/etc/security/limits.conf
分段配置文件:/etc/security/limits.d/*.conf
    通过修改系统的/etc/security/limits.conf配置文件。该文件不仅能限制指定用户的资源使用,还能限制指定组的资源使用。该文件的每一行都是对限定的一个描述
    格式如下:
                    #      
     名称                                                含义
      domain                                  表示用户或者组的名字,还可以使用*作为通配符代表所有用户,组名前面加@和用户名区别
      type                                    可以有两个值,soft和hard,soft指的是当前系统生效的设置值,hard表明系统中所能设定的最大值,用-就表示同时设置了soft和hard的值
      item                                    表明需要限定的资源,可以有很多候选值,如stack,cpu等,分别表示最大的堆栈大小,占用 的cpu时间,noproc是代表进程数,nofile是代表文件打开数
      value                                    对应相应的值
编辑保存之后,需要重新登录一次才能生效

你可能感兴趣的:(ulimit详解)