在一个开发环境中,资源的合理限制和分配,是保证系统可用性的必要条件,同时也与系统上软件运行的性能有着密不可分的联系。
Ulimit是一种linux系统的內键功能,它的一系列参数可用于为由它生成的shell进程及其子进程的资源使用设置限制。
Ulimit支持的限制的类型有以下方面:
所创建的内核文件的大小
进程数据块的大小
Shell进程创建文件的大小
内存锁住的大小
常驻内存集的大小
打开文件描述符的数量
CPU时间
单个用户的最大线程数
最大虚拟内存等。。
用法:ulimit [options] [limit]
一些参数含义以及例子:
-a显示当前所有的limit信息
-H设置硬资源限制,这个一旦设置不能增加
-s线程栈大小,以K字节为单位
Eg:ulimit –Hs 64限制硬资源,线程栈的大小为64K
-S设置软资源限制,设置后可以增加,但是不能超过硬资源的设置
-n可以打开最大文件描述符的数量
Eg:ulimit –Sn 32限制软资源,32个文件描述符
-c设置最大core文件的大小,以blocks为单位
Eg:ulimit –c unlimited不限制core文件的大小
-m最大内存大小,以kbytes为单位
-u用户最大可用的进程数
-t指定最大的CPU占用时间
-p管道缓冲区的大小,以kbytes为单位
-d设置数据段的大小
-v设置虚拟内存的最大值
以上参数可根据具体情况组合使用
使用方法举例:(根据曾经遇到的一个句柄数限制的问题)
对于句柄数理解:
一个句柄就是你给一个文件,设备,套接字(socket)或管道的一个名字, 以便帮助你记住你正处理的名字, 并隐藏某些缓存等的复杂性。、
换句话说:句柄就是一个标识符,只要获得对象的句柄,我们就可以对对象进行任意的操作。
在操作系统层面上,文件操作也有类似于FILE的一个概念,在Linux里,这叫做文件描述符(File Descriptor),而在Windows里,叫做句柄(Handle)(以下在没有歧义的时候统称为句柄)。用户通过某个函数打开文件以获得句柄,此后用户操纵文件皆通过该句柄进行。
#ulimit –n 之后不加任何参数,可以查看系统的最大文件句柄数
# lsof -n|awk ‘{print $2}‘|sort|uniq-c|sort -nr|more通过该命令可以查看某进程打开了多少句柄数
819 4737
303 5021
303 5020
303 5019
303 5018
303 5017
…………
返回的第一列的值是打开的句柄数,第二列是对应进程ID
修改句柄数限制:
linux系统里有两种文件句柄限制,一种是系统级的,一种是用户级的。
修改系统级的:
#echo "30720" >/proc/sys/fs/file-max(30720是自身设置的句柄数的数量)
修改用户级的:
#sudo vi /etc/security/limits.conf
增加如下行:
* soft nofile 2048
* hard nofile 32768
星号表示任何用户,soft/hard表示软限制、硬限制,数字是你要修改的软硬限制的数量。本文出自 “每一步都是新的起点!^_^” 博客,请务必保留此出处http://90112526.blog.51cto.com/6013499/1395716
原文:http://90112526.blog.51cto.com/6013499/1395716