增大Linux的socket最大连接数(针对select,要编译内核)
生活随笔
收集整理的這篇文章主要介紹了
增大Linux的socket最大连接数(针对select,要编译内核)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近接的項目是模擬多個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的連接數。
#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的連接數。
總結
以上是生活随笔為你收集整理的增大Linux的socket最大连接数(针对select,要编译内核)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++编程模拟生产者消费者模型
- 下一篇: 了解select模型的六大注意点