ulimit详解

     网上的ulimit设置,只是简单说明了如何设置ulimit,方法各种各样让人一头雾水,这里整理一下。

目录

一、ulimit简介

二、ulimit命令使用

三、ulimit使用方式及作用范围

四、ulimit相关配置文件

五、ulimit -n与file-max的关系和区别 


一、ulimit简介

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

二、ulimit命令使用

1、选项详解

[root@BriefServer ~]# help ulimit
ulimit: ulimit [-SHacdefilmnpqrstuvx] [limit]
    Modify shell resource limits.
    
    Provides control over the resources available to the shell and processes
    it creates, on systems that allow such control.
    
    Options:
      -S	use the `soft' resource limit
      -H	use the `hard' resource limit
      -a	all current limits are reported
      -b	the socket buffer size
      -c	the maximum size of core files created
      -d	the maximum size of a process's data segment
      -e	the maximum scheduling priority (`nice')
      -f	the maximum size of files written by the shell and its children
      -i	the maximum number of pending signals
      -l	the maximum size a process may lock into memory
      -m	the maximum resident set size
      -n	the maximum number of open file descriptors
      -p	the pipe buffer size
      -q	the maximum number of bytes in POSIX message queues
      -r	the maximum real-time scheduling priority
      -s	the maximum stack size
      -t	the maximum amount of cpu time in seconds
      -u	the maximum number of user processes
      -v	the size of virtual memory
      -x	the maximum number of file locks

选项     例子

Hulimit -Hs 64 限制资源,线程栈大小为64K

Sulimit -Sn 32 限制资源,32个文件描述符

aulimit -a 显示当前所有limit信息

culimit -c unlimited 对生成的core文件大小不进行限制

dulimit -d unlimited 对生成的数据段大小不进行限制

fulimit -f 2048 限制进程可创建的最大文件大小为2048 blocks

lulimit -l 32 限制最大可加锁内存大小为 kbytes

mulimit -m unlimited 对最大内存不进行限制

nulimit -n 128 限制最大可使用128个文件描述符

pulimit -p 512 限制管道缓冲区的大小为512 kbytes

sulimit -s 512 限制线程栈的大小为512 kbytes

tulimit -t unlimited 对最大的cpu占用时间不进行限制

uulimit -u 64 限制用户最多可以使用64个进程

vulimit -v 200000 限制最大可用的虚拟内存为 200000 kbytes 

注意:这个当中的硬限制是实际的限制,而软限制,是warnning限制,只会做出warning;其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软

默认显示的是软限制,如果运行ulimit命令修改的时候没有加上的话,就是两个参数一起改变。

三、ulimit的使用方式及作用范围

1、在用户的启动脚本里

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

2.  应用程序的启动脚本中

  编写个简单的启动脚本,startmyapp

#/bin/sh
ulimit -n 512
myapp.sh

以这个startmyapp启动myapp.sh时,myapp.sh这个脚本打开的文件句柄数不超过512个。

3. 直接控制台输入

[root@web ~]# ulimit -p 256

限制管道缓冲区为256k

       ulimit 作为对资源使用限制的一种工作,是有其作用范围的。那么,它限制的对象是单个用户,单个进程,还是整个系统呢?事实上,ulimit 限制的是当前shell进程以及其派生的子进程。

举例来说,如果用户同时运行了两个 shell 终端进程,只在其中一个环境中执行了 ulimit �C s 100,则该 shell 进程里创建文件的大小收到相应的限制,而同时另一个 shell 终端包括其上运行的子程序都不会受其影响。

四、ulimit相关配置文件

主配置文件:/etc/security/limits.conf

分段配置文件:/etc/secutity/limits.d/*.conf

      通过修改系统的 /etc/security/limits.conf配置文件。该文件不仅能限制指定用户的资源使用,还能限制指定组的资源使用。该文件的每一行都是对限定的一个描述,

格式如下:

#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4

名称             含义

domain     表示用户或者组的名字,还可以使用 * 作为通配符代表所有用户

username|@groupname:设置需要被限制的用户名,组名前面加@和用户名区别。

type          可以有两个值,soft 和 hard。type:有 soft,hard 和 -,soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比har 限制高。用 - 就表明同时设置了 soft 和 hard 的值。

item         则表示需要限定的资源,可以有很多候选值,如 stack,cpu 等等,分别表示最大的堆栈大小,占用的 cpu 时间,noproc 是代表进程数、nofile 是代表文件打开数

value  对应相应的值

编辑保存之后,需要重新登录一次才能生效

五、ulimit -n与file-max的关系和区别    

查看Linux系�y�的最大打�_文件�迪拗疲�使用如下命令:

[root@www ~]# cat /proc/sys/fs/file-max 
97938

     �@表明�@台Linux系�y最多允�S同�r打�_(即包含所有用�舸蜷_文件�悼�和)97938��文件,是Linux系�y�硬限制,所有用�艏�的打�_文件�迪拗贫疾��超�^�@���抵�。通常�@��系�y�硬限制是Linux系�y在���r根��系�y硬件�Y源��r�算出�淼淖罴训淖畲笸��r打�_文件�迪拗疲�如果�]有特殊需要,不���修改此限制,除非想�橛�艏�打�_文件�迪拗圃O置超�^此限制的值。

�@是�Linux在��油瓿舍��行�⑾到y�打�_文件�涤蚕拗圃O置��1024000,修改完後保存此文件。

     file-max是设置 系统所有进程一共可以打开的文件数量 。同时一些程序可以通过setrlimit调用,设置每个进程的限制。如果得到大量使用完文件句柄的错误信息,是应该增加这个值。

也就是说,这项参数是系统级别的。


echo  6553560 > /proc/sys/fs/file-max

或修改 /etc/sysctl.conf, 加入

fs.file-max = 6553560 

执行如下命令生效:sysctl -p

      另外还有一个,/proc/sys/fs/file-nr,可以看到整个系统目前使用的文件句柄数量。

查找文件句柄问题的时候,还有一个很实用的程序lsof。可以很方便看到某个进程开了那些句柄,也可以看到某个文件/目录被什么进程占用了。

显然,对服务器来说,file-max, ulimit都需要设置,否则就可能出现文件描述符用尽的问题,为了让机器在重启之后仍然有效,强烈建立作以下配置,以确保file-max, ulimit的值正确无误:

1. 修改/etc/sysctl.conf, 加入

fs.file-max = 6553560

2.系统默认的ulimit对文件打开数量的限制是1024,修改/etc/security/limits.conf并加入以下配置,永久生效

* soft nofile 65535 
* hard nofile 65535


你可能感兴趣的:(ulimit)