网上的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