Linux默认允许单进程打开文件数量限制测试与修改方法
2010-11-08 18:10:36
分类: LINUX
默认情况下,执行ulimit -a,可以看到
open files (-n) 1024
我们如何来验证这个1024的真实性呢?
写了个简单的测试程序分享如下:
1、先创建文件数量2048个,用shell
该程序创建filedir目录下名为f_i的文件,i为文件编号,执行该程序,可以在filedir下生成f_0—f_2047的文件
下面我们写个c程序来测试到底我们在默认情况下可否同时打开这2048个文件,代码如下:
执行结果,我们可以看到,实际上打开的文件是小于1024个的。
突破单进程打开文件数量的限制方法。
如果你简单的执行ulimit -n 2048的话,是无法达到目的的,因为他只在当前执行的shell指令范围内生效。因此,需要做如下修改:
修改2个文件:
1./etc/security/limits.conf
vim /etc/security/limits.conf
加上:
* soft nofile 8192
* hard nofile 20480
2./etc/pam.d/login
session required /lib/security/pam_limits.so
做完了需要重启设备,然后再执行上面的c程序,可以看到,所有的2048个文件均可成功打开了。
对于一些单进程或者多线程要操作多文件的情况,对系统默认打开问价那数量限制进行修改,有助于提高处理能力。
open files (-n) 1024
我们如何来验证这个1024的真实性呢?
写了个简单的测试程序分享如下:
1、先创建文件数量2048个,用shell
- i=0
- while [ $i -lt 2048 ] ;
- do
- touch ./filedir/f_$i
- o_file=./filedir/f_$i
- echo "$o_file"
- echo "file$i" > ./filedir/f_$i
- echo $i
- file=open($o_file)
- echo "open: $file"
- i=$(($i+1))
- #echo $i
- done
该程序创建filedir目录下名为f_i的文件,i为文件编号,执行该程序,可以在filedir下生成f_0—f_2047的文件
下面我们写个c程序来测试到底我们在默认情况下可否同时打开这2048个文件,代码如下:
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
-
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
-
- #define MAX_FILES 2048
- int main()
- {
- int i = 0;
- int fd;
- char a[8];
- int count = 0;
-
- for (i = 0; i < MAX_FILES; i++) {
- char buf[24] = "./filedir/f_";
- sprintf(a, "%d", i);
- strcat(buf, a);
- printf("file_name:%s\n", buf);
- fd = open(buf, O_RDWR);
- if (fd != -1) {
- count++;
- printf("==fd:%d==\n", fd);
- printf("Opened %d files\n", count);
- } else {
- printf("Error, can only open %d files\n", count);
- return 0;
- }
- }
- return 0;
- }
执行结果,我们可以看到,实际上打开的文件是小于1024个的。
突破单进程打开文件数量的限制方法。
如果你简单的执行ulimit -n 2048的话,是无法达到目的的,因为他只在当前执行的shell指令范围内生效。因此,需要做如下修改:
修改2个文件:
1./etc/security/limits.conf
vim /etc/security/limits.conf
加上:
* soft nofile 8192
* hard nofile 20480
2./etc/pam.d/login
session required /lib/security/pam_limits.so
做完了需要重启设备,然后再执行上面的c程序,可以看到,所有的2048个文件均可成功打开了。
对于一些单进程或者多线程要操作多文件的情况,对系统默认打开问价那数量限制进行修改,有助于提高处理能力。