/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

最新文章

  1. &ldquo;耐撕&rdquo;团队 2016.04.08 站立会议
  2. TortoiseGit安装与配置
  3. linux安装至少有哪两个分区,各自作用是什么?
  4. [GIF] The Phase Property in GIF Loop Coder
  5. C#_自动化测试1_模拟post,get_12306火车票网站自动登录工具
  6. 第七篇、hitTest UITabbar中间突出按钮额外增加可点击区域
  7. .NET和JSON
  8. 有n个台阶,如果一次只能上1个或2个台阶,求一共有多少种上法
  9. 下拉菜单选择(jQuery实现)
  10. LeetCode_Trapping Rain Water
  11. 函数式C代码
  12. Android多线程及异步处理问题
  13. Jquery之Bind方法参数传递与接收的三种方法
  14. plsql 导入导出表、数据、序列、视图
  15. 如何让浏览器支持ES6语法,步骤详细到小学生都能看懂!
  16. Linux常用命令之文件搜索命令
  17. StringRedisTemplate操作Redis
  18. C# 基于 adb 控制安卓
  19. 【Linux高级驱动】触摸屏驱动的移植
  20. WPF Adorner

热门文章

  1. 使用Django创建一个后端是SQLSERVER的简单系统(一)Django连接SQLServer数据库
  2. DES加密解决算法
  3. 51nod1035(循环节)
  4. 洛谷P1912 [NOI2009]诗人小G(决策单调性)
  5. Eclipse中导入项目的方法
  6. H5页面开发的touchmove事件
  7. POJ1030 Rating
  8. 09-----JS事件流的概念(重点)
  9. jquery——尺寸
  10. Table AUD$