Linux中ulimit使用
1.作用:
ulimit是一个内建命令,用于控制由shell启动的进程的可用资源。
2.ulimit命令:
格式:ulimit [options] [limit]
参数:
选项 含义
-a 显示当前系统所有的limit资源信息。
-H 设置硬资源限制,一旦设置不能增加。
-S 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。
-c 最大的core文件大小,单位blocks。
-f 进程可以创建文件的最大值,单位blocks。
-d 进程最大的数据块大小,单位KB。
-m 最大内存大小,单位KB。
-n 查看进程可以打开的最大文件描述符的数量。
-s 线程栈大小,单位KB。
-p 管道缓冲区的大小,单位KB。
-u 用户最大可用进程数。
-v 进程最大可用的虚拟内存,单位KB。
-t 最大CPU占用时间,单位秒。
-l 最大可加锁内存大小,单位KB。
例:查看当前系统所有的限制资源,并修改打开文件句柄数限制。
3.常用限制资源类型:
- 限制内核文件的大小(core file size)
- 限制数据块大小(data seg size)
- 限制Shell进程创建的文件大小(file size)
- 限制可加锁内存大小(max locked memory)
- 限制常驻内存集大小(max memory size)
- 限制打开文件句柄数(open file)
- 限制分配堆栈的最大大小(stack size)
- 限制CPU占用时间(cpu time)
- 限制单个用户最大可用的进程数(max user processes)
- 限制shell进程所能使用的最大虚拟内存(virtual memory)
4.如何生效:
在当前shell会话中设置的值都只是针对于当前shell环境临时生效,在shell会话终止后设置的限制便失效,与其他shell会话无关联。
要想使这种限制永久且多会话生效,这里有几种方式实现:
- 针对于某用户,可将其加入该用户的启动脚本
在该用户的.bashrc或者.bash_profile文件中添加设置
ulimit –n 4096
保存后重新登录生效
- 针对于所有系统用户
修改linux用户的环境变量文件/etc/profile
ulimit –n 4096
保存后运行命令source /etc/profile生效
- 针对于不同用户且能实现永久生效
/etc/security/limits.conf配置文件
limits.conf配置文件能限制指定用户或用户组的资源使用。修改后重新登录生效。
示例:
格式:<domain> <type> <item> <value>
常用domain有三种:uername、@groupname、*(通配符*代表所有用户)
type也是三种:hard、soft、-
hard表示硬资源限制,在系统中所能设定的最大值。
soft表示软资源限制,soft的值不能超过hard的值。
-表示同时设置了hard和soft的值。
item:
- core—内核文件大小
- date—最大数据块大小
- fsize—最大文件大小
- memlock—最大可加锁内存大小
- nofile—打开文件句柄数
- rss—最大持久设置大小
- stack—最大分配堆栈大小
- cpu—占用cpu时间(分钟为单位)
- noproc—最大进程数
- as—地址空间限制
- maxlogins—用户最大允许登录数(root除外)
- maxsyslogins—系统允许所有登录的最大数量
5.经验总结:
在limit限制中,最常关注的是:
open file :一个进程可打开的最大文件数
max user processes:系统允许创建的最大进程数
查看当前系统打开文件数总量:lsof | wc –l
查看当前进程打开文件数:lsof –p pid |wc –l
查看系统总限制最大打开文件总量:cat /proc/sys/fs/file-max
查看当前系统上进程总量:ps –ef |wc –l
(以root权限使用lsof命令)
常见相关报错:
1:too many open file in this system
2:fork:Resource temporarily unavailable
遇到以上报错优先考虑资源不足引发问题
注:limit.conf限制资源与PAM关系紧密,下篇详细介绍。