由于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 (LINUX-2.6内核以后,编译内核不再需要先执行这个命令了)
4. make bzImage
将bzImage 汇入/boot 重启系统即可!
用 1024个以上客户端与伺服器进行连线,在伺服器的终端用netstat |wc 命令可以统计出当前建立的socket的连线数。
|