ulimit:显示(或设置)用户可以使用的资源的限制(limit),这限制分为软限制(当前限制)和硬限制(上限),其中硬限制是软限制的上限值,应用程序在运行过程中使用的系统资源不超过相应的软限制,任何的超越都导致进程的终止。
设置进程能打开的最大文件句柄数:ulimit -n xxx
[root@localhost proc]# ulimit -a core file size (blocks, -c) 100 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited pending signals (-i) 2047 max locked memory (kbytes, -l) 32 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 2047 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited [root@localhost proc]# 输出的每一行由资源名字、(单位,ulimit命令的参数)、软限制组成。详细解释: 参数 描述 core file size core文件的最大值为100 blocks, data seg size 进程的数据段可以任意大 file size 文件可以任意大 pending signals 最多有2047个待处理的信号 max locked memory 一个任务锁住的物理内存的最大值为32kB max memory size 一个任务的常驻物理内存的最大值 open files 一个任务最多可以同时打开1024的文件 pipe size 管道的最大空间为4096字节 POSIX message queues POSIX的消息队列的最大值为819200字节 stack size 进程的栈的最大值为8192字节 cpu time 进程使用的CPU时间 max user processes 当前用户同时打开的进程(包括线程)的最大个数为2047 virtual memory 没有限制进程的最大地址空间 file locks 所能锁住的文件的最大个数没有限制
2.ulimit -n
[root@localhost ~]$ ulimit -n 1024
这表示当前用户的每个进程最多允许同时打开1024个文件,这1024个文件中还得除去每个进程必然打开的标准输入,标准输出,标准错误,服务器监听socket,进程间通讯的unix域socket等文件,那么剩下的可用于客户端socket连接的文件数就只有大概1024-10=1014个左右。也就是说缺省情况下,基于Linux的通信程序最多允许同时1014个TCP并发连接。
对于想支持更高数量的TCP并发连接的通信处理程序,就必须修改Linux对当前用户的进程同时打开的文件数量的软限制(soft limit)和硬限制(hardlimit)。其中软限制是指Linux在当前系统能够承受的范围内进一步限制用户同时打开的文件数;硬限制则是根据系统硬件资源状况(主要是系统内存)计算出来的系统最多可同时打开的文件数量。通常软限制小于或等于硬限制。
修改上述限制的最简单的办法就是使用ulimit命令:
[root@localhost ~]$ ulimit -n<file_num>
上述命令中,在<file_num>中指定要设置的单一进程允许打开的最大文件数。如果系统回显类似于“Operation notpermitted”之类的话,说明上述限制修改失败,实际上是因为在<file_num>中指定的数值超过了Linux系统对该用户打开文件数的软限制或硬限制。因此,就需要修改Linux系统对用户的关于打开文件数的软限制和硬限制。