• 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
    ", buf);
                    fd = open(buf, O_RDWR);
                    if (fd != -1) {
                            count++;
                            printf("==fd:%d==
    ", fd);
                            printf("Opened %d files
    ", count);
                    } else {
                            printf("Error, can only open %d files
    ", 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
  • 相关阅读:
    软件工程课件
    团队博客作业Week1
    IntelliJ IDEA下Git的配置与使用(命令行下)
    Java语言程序设计课程学期总结
    JDBC访问数据库的一些小技巧
    Conference-Web Search and Data Mining
    线程停止与volatile
    班会-2016-2017第2学期
    Java第11次实验(JDBC数据库编程)
    Python-Jupyter Notebook使用技巧
  • 原文地址:https://www.cnblogs.com/shansongxian/p/9796098.html
Copyright © 2020-2023  润新知