Chinaunix首页 | 论坛 | 博客
  • 博客访问: 305891
  • 博文数量: 34
  • 博客积分: 860
  • 博客等级: 准尉
  • 技术积分: 524
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-23 12:04
文章存档

2011年(16)

2010年(7)

2009年(4)

2008年(7)

分类: LINUX

2010-11-08 18:10:36

默认情况下,执行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 (i = 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个文件均可成功打开了。


对于一些单进程或者多线程要操作多文件的情况,对系统默认打开问价那数量限制进行修改,有助于提高处理能力。
阅读(7004) | 评论(0) | 转发(0) |
0

上一篇:春花秋月何时了

下一篇:

给主人留下些什么吧!~~