Chinaunix首页 | 论坛 | 博客
  • 博客访问: 221322
  • 博文数量: 27
  • 博客积分: 1151
  • 博客等级: 少尉
  • 技术积分: 426
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-15 19:25
文章分类
文章存档

2012年(5)

2011年(6)

2010年(16)

我的朋友

分类: LINUX

2010-07-18 18:28:35


最近接的项目是模拟多个socket 客户端与服务器进行通信。由于Linux 系统的限制,在linux/include/linux/posix_types.h文件中有如下的宏定义:

#undef __FD_SETSIZE

#define __FD_SETSIZE 1024

这个宏是对最大文件描述符的定义为1024。当需要1024个以上的fd时,例如select()函数就会侦听出错。因此需要将1024改成需要的数目,但最多不能超过65535。但仅仅修改这个是不够的。

第二步就需要修改一个进程最大打开的文件数。其具体步骤是:

1、cd /usr/src/linux-2.4/include/linux

2、vi limits.h 编辑文件:

#define NR_OPEN 90240 原值为1024

#define OPEN_MAX 10240 原值为1024

3、vi fs.h

#define INR_OPEN 10240 原值为1024

#define NR_FILE 65536 原值为8192,这个值为内存64/1M的比率计算,1G内存计算为:64*1024

#define NR_RESERVED_FILES 128 原值为10.

4、cd /usr/src/linux-2.4/include/net

5、vi tcp.h

#define TCP_LHTABLE_SIZE 128 原值为32.便于listen侦听队列,设大。

设置最大打开文件数与内存相关,太大系统会变慢。

第三步就是编译内核,其具体步骤是:

1. make clean

2. make

3. make dep

4. make bzImage

将bzImage 导入/boot 重启系统即可!

用 1024个以上客户端与服务器进行连接,在服务器的终端用netstat |wc 命令可以统计出当前建立的socket的连接数。
阅读(3876) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~