Linux默认允许单进程打开文件数量限制测试与修改方法

分类: LINUX

默认情况下,执行ulimit -a,可以看到
open files                      (-n) 1024
我们如何来验证这个1024的真实性呢?
写了个简单的测试程序分享如下:
1、先创建文件数量2048个,用shell
  1. i=0
  2. while [ $i -lt 2048 ] ;
  3. do
  4.         touch ./filedir/f_$i
  5.         o_file=./filedir/f_$i
  6.         echo "$o_file"
  7.         echo "file$i" > ./filedir/f_$i
  8.         echo $i
  9.         file=open($o_file)
  10.         echo "open: $file"
  11.         i=$(($i+1))
  12.         #echo $i
  13. done

该程序创建filedir目录下名为f_i的文件,i为文件编号,执行该程序,可以在filedir下生成f_0—f_2047的文件
下面我们写个c程序来测试到底我们在默认情况下可否同时打开这2048个文件,代码如下:
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>

  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <fcntl.h>

  7. #define MAX_FILES 2048
  8. int main()
  9. {
  10.         int i = 0;
  11.         int fd;
  12.         char a[8];
  13.         int count = 0;

  14.         for (= 0; i < MAX_FILES; i++) {
  15.                 char buf[24] = "./filedir/f_";
  16.                 sprintf(a, "%d", i);
  17.                 strcat(buf, a);
  18.                 printf("file_name:%s\n", buf);
  19.                 fd = open(buf, O_RDWR);
  20.                 if (fd != -1) {
  21.                         count++;
  22.                         printf("==fd:%d==\n", fd);
  23.                         printf("Opened %d files\n", count);
  24.                 } else {
  25.                         printf("Error, can only open %d files\n", count);
  26.                         return 0;
  27.                 }
  28.         }
  29.         return 0;
  30. }


执行结果,我们可以看到,实际上打开的文件是小于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个文件均可成功打开了。


对于一些单进程或者多线程要操作多文件的情况,对系统默认打开问价那数量限制进行修改,有助于提高处理能力。
Linux系统中,每个进程都有一个文件描述符表,用于跟踪它打开的文件。文件描述符是一个非负整数,它在打开文件时由内核分配。 Linux进程打开文件数设置了限制,这个限制被称为文件描述符限制打开文件限制。这个限制控制了一个进程能够同时打开的文件数量。 文件描述符限制通常由操作系统的配置文件中的参数控制。我们可以通过 ulimit 命令来查看和修改这些限制默认情况下,一个进程可以打开1024个文件。但是,这个限制是可以根据系统的需求进行修改的。一般来说,增加文件描述符限制可能会消耗更多的系统资源。 如果一个进程需要打开更多的文件,可以通过修改操作系统配置文件来增加文件描述符限制。比如,在/etc/security/limits.conf文件中,可以通过添加如下行来增加文件描述符限制: * soft nofile 4096 * hard nofile 8192 这将允许所有用户的进程打开的文件数上限分别为4096和8192。 需要注意的是,文件描述符限制是针对每个进程的,而不是整个系统。这意味着,每个进程都可以独立地设置自己的文件描述符限制,并且不会影响其他进程Linux进程的文件描述符限制对于保护系统的稳定性和安全性非常重要。通过合理设置文件描述符限制,可以防止一个进程占用过多的系统资源,从而避免系统崩溃或资源竞争的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值