默认情况下,执行ulimit -a,可以看到
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个文件均可成功打开了。
对于一些单进程或者多线程要操作多文件的情况,对系统默认打开问价那数量限制进行修改,有助于提高处理能力。
阅读(7401) | 评论(0) | 转发(0) |