将来的你会感谢现在努力的自己,骚年,趁年轻多努力学习 ------ Jasper_boy

linux打开文件数测试

/proc/sys/kernel/threads-max 系统最大线程数量
/proc/sys/vm/max_map_count 限制一个进程可以拥有的VMA(虚拟内存区域)的数量
/proc/sys/kernel/pid_max 系统最大进程数量

  

默认情况下,执行ulimit -a,可以看到 
open files                      (-n) 1024 
我们如何来验证这个1024的真实性呢? 
写了个简单的测试程序分享如下: 
1、先创建文件数量100000个,用shell 

mkdir ./filedir
i=0
while [ $i -lt 100000 ] ;
do
        touch ./filedir/f_$i
        o_file=./filedir/f_$i
        echo "$o_file"
        echo "file$i" > ./filedir/f_$i
        i=$(($i+1))
        #echo $i
done

该程序创建filedir目录下名为f_i的文件,i为文件编号,执行该程序,可以在filedir下生成f_0—f_100000的文件 
下面我们写个c程序来测试到底我们在默认情况下可否同时打开这100000个文件,代码如下:   

~]$ cat test_openfiles.c 
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#define MAX_FILES 100000
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;
}

编译这个c文件

gcc test_openfiles.c

会生成一个a.out的文件

执行./a.out

输出结果如下:
==fd:1020==
Opened 1018 files
file_name:./filedir/f_1018
==fd:1021==
Opened 1019 files
file_name:./filedir/f_1019
==fd:1022==
Opened 1020 files
file_name:./filedir/f_1020
==fd:1023==
Opened 1021 files
file_name:./filedir/f_1021
Error, can only open 1021 files

测试发现最大只能打开1021个文件

调整最大打开文件数

修改/etc/security/limits.conf ,在最后面添加如下:

* - nofile  1048576

重新登录终端生效

[tuser@localhost ~]$ exit
logout
[root@localhost ~]# su - tuser
Last login: Tue Oct 16 09:18:01 CST 2018 on pts/2
[tuser@localhost ~]$ ulimit -n
1048576

再次执行./a.out文件

file_name:./filedir/f_99995
==fd:99998==
Opened 99996 files
file_name:./filedir/f_99996
==fd:99999==
Opened 99997 files
file_name:./filedir/f_99997
==fd:100000==
Opened 99998 files
file_name:./filedir/f_99998
==fd:100001==
Opened 99999 files
file_name:./filedir/f_99999
==fd:100002==
Opened 100000 files

 

posted @ 2018-10-16 09:29  Jasper_boy  阅读(406)  评论(0编辑  收藏  举报