Chinaunix

标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢? [打印本页]

作者: 尘归尘土归土    时间: 2005-09-25 10:25
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
微软的msn服务器就能支持一台服务器承受6-12万个连接。
作者: platinum    时间: 2005-09-25 11:23
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
你怎么知道的?
作者: qinjian1981    时间: 2005-09-26 14:27
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
你如何得知!!!!!!!!!
作者: loveKDE    时间: 2005-09-26 18:06
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
怎么知道的??
作者: sqmax    时间: 2005-09-26 19:24
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
PC server是难承受这么大访问量的
作者: 尘归尘土归土    时间: 2005-09-29 16:22
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
当然不是pc了,我还知道qq的服务器也能承受这么大量的连接.
作者: platinum    时间: 2005-09-29 16:28
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
[quote]原帖由 "尘归尘土归土"]当然不是pc了,我还知道qq的服务器也能承受这么大量的连接.[/quote 发表:

既然是硬件问题,那和编译内核有什么关系?
你也用“当然不是pc了”不就完了
作者: 尘归尘土归土    时间: 2005-09-30 09:38
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
但是现在发行的版本是默认就不支持那么多tcp连接的.
作者: platinum    时间: 2005-09-30 10:33
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
[quote]原帖由 "尘归尘土归土"]但是现在发行的版本是默认就不支持那么多tcp连接的.[/quote 发表:

那么,这点你又是怎么知道的呢?
作者: npcomet    时间: 2005-10-01 11:33
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
你们的不知道原来不比我少呀
作者: hfh08    时间: 2005-10-01 20:03
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
我也不知道 呵呵
作者: q1208c    时间: 2005-10-01 21:56
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
呵呵, 这个好象有难度.
偶以为, 单机的 tcp 数是很难过 65535 的.

要是 cluster 就不一定了. 几百万也没什么.
作者: 尘归尘土归土    时间: 2005-10-02 13:53
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
不是cluster,就是单机怎么具体做呢?有没有这方面的文档.
作者: q1208c    时间: 2005-10-03 11:21
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
[quote]原帖由 "尘归尘土归土"]不是cluster,就是单机怎么具体做呢?有没有这方面的文档.[/quote 发表:


能打开的端口数是 65535, 你怎么能有 10w 的 tcp 呢?
作者: platinum    时间: 2005-10-03 11:46
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "q1208c" 发表:


能打开的端口数是 65535, 你怎么能有 10w 的 tcp 呢?

好像不能那么算
比如 WEB 服务,listen 端口都是 80,3 个连接和 10 个连接在服务端也只有看到 TCP/80 在 ESTABLISHED
作者: 笨,拉灯    时间: 2005-10-03 12:17
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
关注中,
我的想法:能否调调整tcp 中time-wait 和,timeout 的时间。 
作者: heijude    时间: 2005-10-04 15:49
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
一个socket上能够建立的最大连接数有没有人知道或测试过?
作者: q1208c    时间: 2005-10-04 19:22
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "platinum" 发表:

好像不能那么算
比如 WEB 服务,listen 端口都是 80,3 个连接和 10 个连接在服务端也只有看到 TCP/80 在 ESTABLISHED
   有道理. 我倒忘了有这样的. 但不知道这样的是不是同时的. 因为可能有的在 wait, 有的在 run.
作者: attiseve    时间: 2005-10-06 00:37
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
QQ默认好像是udp,这东西比tcp消耗资源少。估计能提高不少连接。x86-64加巨量内存估计能有提高。
作者: xiyang    时间: 2005-10-07 06:08
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "q1208c" 发表:


能打开的端口数是 65535, 你怎么能有 10w 的 tcp 呢?


这样的说法是没有根据的

因为server是被动打开的。
譬如说他在80listen。客户端一般是随机的分配1024-65535之间的端口来建立连接的。
作者: q1208c    时间: 2005-10-07 09:01
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "xiyang" 发表:


这样的说法是没有根据的

因为server是被动打开的。
譬如说他在80listen。客户端一般是随机的分配1024-65535之间的端口来建立连接的。
  

想起来了. 兄弟说得对.

不过, 又想起一件事, Linux(2.4 kernel )支持的process 最大为 32000. 看来过10W还是有难度呀.
作者: cow977    时间: 2005-10-07 09:32
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
还有Memory也有问题。
作者: codefan    时间: 2005-10-07 16:12
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
多设几个ip,然后,作个dns集群。
作者: bhpang2    时间: 2005-10-07 16:43
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
算算内存的消耗量。每个TCP连接控制信息可能要100BYTE,消耗10Wx100=10M,还有更大的发送接受缓冲区,一般一个TCP连接要4096x2=8192BYTE这是现代OS中差不多是最少的了,一般是8192x2
消耗10Wx8K=800M,可以认为维护这些TCP连接要消耗1G内存,这些都是核心内存,所以在4G的32位的X86空间里要分给核心可能要2G空间,我在FREEBSD里看到有如何给内核划分空间的,我不知LINUX是如何安排的。FREEBSD要一个选项定义核心的开始地址;还有就是要定义TCP发送接受缓冲区的默认直,还要考虑每个进程最多支持的打开文件数来确定服务进程的数量,这是我想当然的算法,但PC能否支持如此大的连接?
作者: jamesb    时间: 2005-10-08 09:36
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
try google c10k
作者: 独孤九贱    时间: 2005-10-08 13:29
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
linux本身承受这样的连接数是没有问题的……
在性能方便更重要的还是看硬件
CPU,内存,总线……
作者: 尘归尘土归土    时间: 2005-10-08 16:01
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
虽然客户端一般是随机的分配1024-65535之间的端口来建立连接的。但是还是可以通过修改内核代码让它支持更多的连接,我只是知道有人这么做过,如果能超过十万更好,我发这个帖子只是想知道一个方法,怎么能让linux能支持更多的连接,不然linux的开源相对win平台还有什么优势.
作者: platinum    时间: 2005-10-08 16:03
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
[quote]原帖由 "尘归尘土归土"]不然linux的开源相对win平台还有什么优势[/quote 发表:

开源 不等于 万能
作者: bhpang2    时间: 2005-10-08 20:48
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
客户端要如此多的连接有和现实意义?
有人做过?不可能吧,看看tcp.h的TCP结构说明吧,16bit端口长度最大也就是65536。

增加N个网卡或IP吧,这样从理论上就可以有N x 65536个客户端连接了
作者: 尘归尘土归土    时间: 2005-10-11 15:15
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
当然有现实意义了,支撑的连接数多的话可以少花钱买几台机器啊.
作者: colddawn    时间: 2005-10-12 08:01
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
我相信能跑得起这么大应用的机器,绝对比我10台只能支持1万连接的机器贵的多。
作者: cxu123    时间: 2005-10-14 14:26
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "bhpang2" 发表:
算算内存的消耗量。每个TCP连接控制信息可能要100BYTE,消耗10Wx100=10M,还有更大的发送接受缓冲区,一般一个TCP连接要4096x2=8192BYTE这是现代OS中差不多是最少的了,一般是8192x2
消耗10Wx8K=800M,可以认为维护这..........

就是这个兄弟说的这样,而且这些内存是不可分页的,不能用Swap Out,10万TCP应该不可能。
作者: platinum    时间: 2005-10-14 15:27
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "cxu123" 发表:

而且这些内存是不可分页的,不能用Swap Out

这是不是指不能使用 SWAP 虚拟内存?
作者: cxu123    时间: 2005-10-14 16:32
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "platinum" 发表:

这是不是指不能使用 SWAP 虚拟内存?

内核的Socket buffer应该是Non-Pageable的。中断来了,网卡通过的DMA好像只能使用Real memory地址读Socket buffer,如果被SWAP就有问题了
作者: 尘归尘土归土    时间: 2005-10-14 16:39
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
不管机器贵不贵,我只想知道怎么做能实现.
作者: 尘归尘土归土    时间: 2005-10-14 16:41
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
大家都说的挺有道理,但是我想知道具体的解决方案.比如重新编译内核方面都需要修改那些地方.
作者: cxu123    时间: 2005-10-14 16:44
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
[quote]原帖由 "尘归尘土归土"]不管机器贵不贵,我只想知道怎么做能实现.[/quote 发表:

UDP可以,TCP没戏。Window的TCP Socket Buffer和Linux一样是Not-pageable,而且32位的Windows内核不可分页内存最多只能用256M。MSN除非是用UDP。
作者: albcamus    时间: 2005-10-14 16:48
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "cxu123" 发表:

就是这个兄弟说的这样,而且这些内存是不可分页的,不能用Swap Out,10万TCP应该不可能。


何谓不可分页? 如果做DMA用,要求物理上是连续的,不能向vmalloc申请来的那样,可以物理上不连续。即使是这样,已然是分页的,因为页就是内核管理内存的基本单位。kmalloc调用slab分配器,slab分配器调用谁?还不是get_free_pages?
作者: percy_pan    时间: 2005-10-14 16:55
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
有灭搞错,一台主机也只有65536个socket啊,十万个,你做梦吧,
所以你怎么编译都不可能啦
人家肯定搞了负载均衡啦
作者: albcamus    时间: 2005-10-14 16:57
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "platinum" 发表:

这是不是指不能使用 SWAP 虚拟内存?


整个逻辑地址空间有一个界限,它把整个逻辑地址空间划分成两部分。这个界限叫做TASK_SIZE,IA32上它是0xC0000000,就是正好处在3G的那个地址。在这个界限上的(地址比0xC0000000大)的是内核空间,比它小的是用户空间。

所有的用户空间逻辑地址所对应的物理页面,都可能被swap出去;所有的内核空间逻辑地址所对应的物理页面,都不允许被swap出去。
作者: cxu123    时间: 2005-10-14 17:10
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "albcamus" 发表:


何谓不可分页? 如果做DMA用,要求物理上是连续的,不能向vmalloc申请来的那样,可以物理上不连续。即使是这样,已然是分页的,因为页就是内核管理内存的基本单位。kmalloc调用slab分配器,slab分配器调用谁?还?.........

英文直译就是这样的,这个页的意思不是你说的物理内存页。Linux kernel is not pageable,诸如此类,英文大家都是这么说的,很少用swapable之类的,swapable是热插拔。
作者: albcamus    时间: 2005-10-14 17:27
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
>;>;swapable是热插拔

热插拔不是Hotplug吗?
作者: cxu123    时间: 2005-10-14 17:34
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "albcamus" 发表:
>;>;swapable是热插拔

热插拔不是Hotplug吗?

Hotplug是名词,pageable正确中文翻译是“可调[分]页”
作者: chutianyin    时间: 2005-10-15 15:34
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
俺是菜鸟,俺来发言,其实各位大虾讨论的都是机器在性能上或者是理论上能否实现的问题,但是我个人认为,搂主的目的只是想知道在哪里修改这个值,至于修改了以后能不能达到这么多或者是能不能正常的运行都无所谓,先要知道在哪里修改的,就像修改apache的连接一样,可以设置成10万,实际上根本达不到10万机器肯定就挂了,挂不挂是一回事,反正是改成10万了。
作者: bhpang2    时间: 2005-10-17 16:15
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
到现在才发现楼主好象没分清客户端和服务器端的不同,作为服务器,单一个端口就可以支持N个TCP连接,看看sina一般不就是给你一个80口么?google也只是提供一个80口啊,十万个算什么?但客户端就不同了socket只是从1024---65535给你分配端口,这些端口一般是不重复使用的,而作为服务器的端口是可以重复使用的.
作者: bhpang2    时间: 2005-10-17 17:24
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
内核一般不使用分页管理的机制,大概的意思是核心有很大一部分的内存是预先分配的,这部分物理内存是私有财产,永不放弃的,而且用途已经固定,但并不是说核心的内存是不变的,现在的OS应该都可以和页面级内存分配器交换物理内存页,比如核心发现物理内存不够用,它会向物理内存分配器申请物理内存,以页为最小单位,并映射到内核空间,slab分配器只是核心的内存分配器,为核心的数据结构/变量分配内存.slab向物理内存分配器申请物理内存页,它也有向页面级内存分配器返还物理内存页的功能.也就是说内核在引导的时候分配了一部分物理内存,剩下的物理内存以页为单位由一内存管理机构管理,slab或用户进程都从它那里申请物理内存.
核心使用的动态分配的页内存只有通过内核的内存分配器(如slab)释放回去,不会被交换的.
作者: 尘归尘土归土    时间: 2005-10-17 17:31
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
我以前做过服务器开发,但是并不敢说精通,只是觉得在服务器端都有连接数的限制,觉得不爽,想知道怎么能增加,bhpang2兄弟说的google也只提供一个80端口,这个是没错啊,但是它也会有连接数的限制啊,并不是说无限,http服务尚且如此,更别说别的服务了。我只是听朋友说qq那边的服务器可以实现十万以上连接数,想知道怎么能实现,好奇。所以想向大家讨教。
作者: 尘归尘土归土    时间: 2005-10-17 17:35
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
象我知道的很多游戏服务器连接数支撑就很少,我知道有一款国产网络游戏单台服务器能支撑300个连接,如果一多的话就当掉了。这个并不是连接数的问题,而且别的资源的问题。
作者: q1208c    时间: 2005-10-17 18:02
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
[quote]原帖由 "尘归尘土归土"]我以前做过服务器开发,但是并不敢说精通,只是觉得在服务器端都有连接数的限制,觉得不爽,想知道怎么能增加,bhpang2兄弟说的google也只提供一个80端口,这个是没错啊,但是它也会有连接数的限制啊,并不是说无限
作者: bhpang2    时间: 2005-10-17 18:06
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
呵呵,原来如此,qq好象是居于UDP的吧,如果这样就比TCP的简单多了.UDP是无状态的协议,不应该说是实现十万以上连接数,说TCP才说连接,好象是这样的吧.
我没做过程序.socket差不多忘光了,大概应该提供一个进程池,里面有N个服务进程在等待工作,想想真象去夜总会啊,大厅里有N个小姐就象服务进程,客人来了,小姐就会为你服务,但是如果小姐很多也很累,都在睡觉,如果只来了一个客人也要惊动所有的小姐,那就不太好(唤醒太多的进程成本很高),最好只是只叫醒一个小姐就可以了,于是这个环节要采用某些办法保证一次只叫醒一个小姐来服务.程序也大概如此实现吧.
作者: bingosek    时间: 2005-10-18 00:24
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "bhpang2" 发表:
呵呵,原来如此,qq好象是居于UDP的吧,如果这样就比TCP的简单多了.UDP是无状态的协议,不应该说是实现十万以上连接数,说TCP才说连接,好象是这样的吧.
我没做过程序.socket差不多忘光了,大概应该提供一个进程池,里面有N..........

进程是派生出来,不是一直都有的
作者: 尘归尘土归土    时间: 2005-10-18 09:55
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
我就是听说qq是能实现10万个tcp连接才问大家的,而且我去年参加微软技术大会的时候听微软的专家说他们的msn服务器也是实现能支撑6-12万个tcp连接。
作者: kingzai    时间: 2005-10-18 10:20
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
使用的是epoll模型,上百万连接使用的是负载均衡
作者: albcamus    时间: 2005-10-18 10:42
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "bhpang2" 发表:

我没做过程序.socket差不多忘光了,大概应该提供一个进程池,里面有N个服务进程在等待工作,想想真象去夜总会啊,大厅里有N个小姐就象服务进程, 客人来了,小姐就会为你服务,但是如果小姐很多也很累,都在睡觉,如果只来了一个客人也要惊动所有的小姐,那就不太好(唤醒太多的进程成本很高),最好只是只叫醒一个小姐就可以了,于是这个环节要采用某些办法保证一次只叫醒一个小姐来服务.程序也大概如此实现吧.


真晕,这个比喻精彩的形容出了惊群效应(Thunder Herd)
作者: ljily000    时间: 2005-10-18 12:14
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
请按照楼主的本意去讨论,要不都跑题了。
作者: 尘归尘土归土    时间: 2005-10-20 09:05
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
好像没有相关的文档,我没找到,不知道谁能提供。
作者: me09    时间: 2005-10-20 15:47
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
关注中loading...................
作者: hongzjx    时间: 2005-10-20 16:00
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
bhpang2说的真是形象啊,吾等佩服
作者: 北京野狼    时间: 2005-10-20 16:14
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
用linux的,真牛啊
作者: 尘归尘土归土    时间: 2005-10-25 10:15
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
顶。
作者: zonzi    时间: 2005-10-25 10:36
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
这样的算不算一台服务器啊

作者: 尘归尘土归土    时间: 2005-10-26 16:51
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
应该就是一台机器才算。
作者: hongzjx    时间: 2005-10-26 17:01
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
看你怎么看了
作者: 北京野狼    时间: 2005-10-27 11:09
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
搞linux的都是神仙啊。
至少会做梦
作者: ljj1998    时间: 2005-10-27 11:13
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
而且不许人说他不是,象爱自家的孩子
作者: viton_xuan    时间: 2005-10-27 11:33
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
QQ用UDP,我们只在登陆的时候连接服务器,对话开始后是点对点的,就不用服务器了.估计消耗不大吧.
作者: jato    时间: 2005-10-27 14:17
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "percy_pan" 发表:
有灭搞错,一台主机也只有65536个socket啊,十万个,你做梦吧,
所以你怎么编译都不可能啦
人家肯定搞了负载均衡啦


哈, 不用这么激动吗.
一台主机用两块网卡就可以过10万了, 不用重编译内核.
只是若内存少, 机器慢的话, 这些连接就做不了什么有用的事情了
作者: hongzjx    时间: 2005-10-27 14:41
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "北京野狼" 发表:
搞linux的都是神仙啊。
至少会做梦



不明白什么意思耶
作者: 北京野狼    时间: 2005-10-27 14:42
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "jato" 发表:


哈, 不用这么激动吗.
一台主机用两块网卡就可以过10万了, 不用重编译内核.
只是若内存少, 机器慢的话, 这些连接就做不了什么有用的事情了


兄弟不是这么算的。
即便server仅仅监听80.当accept成功之后就产生一个新的socket。
iNewSock = accept(iSock,(struct sockaddr *)&client_addr,&len);
你可以看一下这个新的iNewSock的端口。。。。。。。。。

而且server 应该立刻fork一个进程处理,这就是内存和cpu的处理了。。。
所有说是令人敬佩的linux user
作者: cgweb    时间: 2005-10-27 17:47
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
不太容易做到的
作者: 尘归尘土归土    时间: 2005-10-27 21:39
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
还是想请高手什么时候给我们讲讲。
作者: snow888    时间: 2005-10-27 22:27
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
做了多年的 Unix ,第一次学 Linux ,看来真的是落伍了.

期待高手指点!
作者: don    时间: 2005-10-27 23:28
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
难怪msn老死机,原来是搞得这么邪乎。

还是去研究负载均衡吧,不要都在一棵树上吊死。
作者: jato    时间: 2005-10-28 06:16
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "北京野狼" 发表:


兄弟不是这么算的。
即便server仅仅监听80.当accept成功之后就产生一个新的socket。
iNewSock = accept(iSock,(struct sockaddr *)&client_addr,&len);
你可以看一下这个新的iNewSock的端口。。。。。。。。。..........

你说的这个不是我说的问题啊, 我只说了两个网卡就可以使连接数过10万了.  还有, 你若能在一个网卡上绑定两个或更多的IP的话, 那么一个网卡就行, 不过估计这时就要重编译内核了.

用 TCP 当然是accept 成功后就产生一个新的socket, 但fork一个新的进程则只是一种实现 server 的方式, 也可以是多线程的.  若处理简单的话, 你还可以在一个thread 内处理多个连接的
作者: platinum    时间: 2005-10-28 07:59
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "jato" 发表:

你说的这个不是我说的问题啊, 我只说了两个网卡就可以使连接数过10万了.  还有, 你若能在一个网卡上绑定两个或更多的IP的话, 那么一个网卡就行, 不过估计这时就要重编译内核了.

用 TCP 当然是accept 成功后就产..........

如果你说的是对的,那么你是说和 IP 有关,和网卡无关吧?
若一块网卡绑多 IP 也可以的话,那么双网卡做 bonding 应该也不行了哦
作者: FerrariAurea    时间: 2005-10-28 11:53
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
32位操作系统不可能承受 理论上 65535以上个链接的.因为Accept后,会返回一个65535以内的数作为于客户端通信的端口.虽然客户端connect的端口都是固定一个,但是每次accept成功后,都会对应再分配一个本地端口用来和客户通信,
如果非要从内核上支持理论上10万的访问量,必需修改套接字的所有相关函数.尤其是accept后打开的本地端口,一定不要在2的32次方范围内选择了.不过具体操作就并非那么简单了,也许你还要改变每台客户机上的 socket的实现.

金山的游戏服务器是1万个tcp链接.据说还是重写了tcp头,减少了传输量.
传奇伺服一般在5000个左右.QQ游戏,是通过群组的.
其实大传输量,大并发量的服务器都是通过群组实现的.
作者: FerrariAurea    时间: 2005-10-28 11:59
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
当然如果有100个网卡,说明可以有100个ip地址可以用.
那么运行100个服务器程序,每个程序用select模型作通信.不用fork .
那么一台机器确实可以有无数个客户端了,但是有什么意义吗?
楼主要的是学术方面的牛角呢.还是应用方面的良药呢.
作者: FerrariAurea    时间: 2005-10-28 12:01
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
如果是学术讨论,那很容易.
找个64位大型机.你说你想要多少客户端吧.
作者: 北京野狼    时间: 2005-10-28 13:44
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "jato" 发表:

你说的这个不是我说的问题啊, 我只说了两个网卡就可以使连接数过10万了.  还有, 你若能在一个网卡上绑定两个或更多的IP的话, 那么一个网卡就行, 不过估计这时就要重编译内核了.

用 TCP 当然是accept 成功后就产..........


我是不知道楼主,想建立10w个连接干吗?
无论多进程还是多线程,10w个连接,设想一下要多少内存?
一个线程处理多个连接没有适用性。

BTW:做网络server,几乎没有使用多线程的。
作者: 北京野狼    时间: 2005-10-28 13:47
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
这个可以供参考
http://bbs.chinaunix.net/forum/viewtopic.php?t=479047
作者: hongzjx    时间: 2005-10-28 15:48
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "don" 发表:
难怪msn老死机,原来是搞得这么邪乎。

还是去研究负载均衡吧,不要都在一棵树上吊死。


msn还是做得很好呀!
作者: jato    时间: 2005-10-28 22:38
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
原帖由 "北京野狼" 发表:


我是不知道楼主,想建立10w个连接干吗?

不知道
原帖由 "北京野狼" 发表:

无论多进程还是多线程,10w个连接,设想一下要多少内存?

有的情况下, 一个连接有几十K 就够了,  只要编程时处理的好一些, 这内存现在并不是大问题.

原帖由 "北京野狼" 发表:


一个线程处理多个连接没有适用性。

看什么情况吧, 像聊天室, 若用TCP的话, 一个线程处理多个连接就可能好一些

原帖由 "北京野狼" 发表:

BTW:做网络server,几乎没有使用多线程的。

哈, 知道为什么吗? 另外, 现在的 APACHE 可是多进程加上多线程的, 并不是一个进程处理一个连接的
作者: snow888    时间: 2005-10-28 23:47
标题: 怎么通过重新编译内核让linux能承受10万个TCP连接呢?
这样讨论有意义没有啊。
作者: 北京野狼    时间: 2005-10-31 14:55
原帖由 jato 于 2005-10-28 22:38 发表

有的情况下, 一个连接有几十K 就够了,  只要编程时处理的好一些, 这内存现在并不是大问题..


难道应用系统,连接上就不干事情了?不查询数据库,不i/O?
你知道查询一次数据库,要耗费多少内存?

就算连接耗费几十K,  几十K * 10W这是多少内存了。

[ 本帖最后由 北京野狼 于 2005-10-31 15:08 编辑 ]
作者: 北京野狼    时间: 2005-10-31 14:55
原帖由 jato 于 2005-10-28 22:38 发表

看什么情况吧, 像聊天室, 若用TCP的话, 一个线程处理多个连接就可能好一些..


没这事
作者: 北京野狼    时间: 2005-10-31 14:58
原帖由 jato 于 2005-10-28 22:38 发表

哈, 知道为什么吗? 另外, 现在的 APACHE 可是多进程加上多线程的, 并不是一个进程处理一个连接的  


apache稳定的版本都是进程的。
不要去想apache怎么做,你自己写的系统有能力实现apache的稳定型吗?
作者: 北京野狼    时间: 2005-10-31 15:00
原帖由 jato 于 2005-10-28 22:38 发表

哈, 知道为什么吗? 另外, 现在的 APACHE 可是多进程加上多线程的, 并不是一个进程处理一个连接的  


apache稳定的版本都是进程的。
不要去想apache怎么做,你自己写的系统有能力实现apache的稳定型吗?
作者: 北京野狼    时间: 2005-10-31 15:05
关于多进程和多线程的讨论
http://bbs.chinaunix.net/viewthr ... &extra=page%3D1

[ 本帖最后由 北京野狼 于 2005-10-31 15:14 编辑 ]
作者: syiae    时间: 2005-11-01 13:25
原帖由 FerrariAurea 于 2005-10-28 11:53 发表
32位操作系统不可能承受 理论上 65535以上个链接的.因为Accept后,会返回一个65535以内的数作为于客户端通信的端口.虽然客户端connect的端口都是固定一个,但是每次accept成功后,都会对应再分配一个本地端口用来和客 ...

越看越糊涂

[ 本帖最后由 syiae 于 2005-11-1 14:35 编辑 ]
作者: starrow    时间: 2005-11-02 15:02
关注中ING
作者: caibird3rd    时间: 2005-11-04 10:14
很多跑题的水贴呀

个人看法:要支持超大量连接,首先要解决的是内存消耗问题,现在一般的2.4、2.6内核只支持1G的内核空间,肯定是不行的,但是像RHAS3、4的内核都有补丁,可以支持到1:1的内核-用户空间比,即全部物理内存,这个应该没什么问题了,理论上说几百万个连接也没什么;最主要的是网络应用程序的结构,很大部分应用的复杂性来自这里,如效率、互斥等关键问题,要支持这么多的连接,只能使用异步socket、事件驱动、多线程等机制,还跟应用协议有关系,这个需要花很大力气;另外不可忽视的是,内核里对网络资源的管理也需要定制优化,比如网络驱动及协议实现的优化甚至改造(如驱动中断处理、半连接的管理、已有连接的查找、资源的快速回收)、对网络攻击的防范等等,要知道,在大量并发访问下,内核这部分的开销也是惊人的,要支持超大量连接,绕不开这一块

有谁做这方面开发工作,大家交流交流! mrwangxc@hotmail.com

[ 本帖最后由 caibird3rd 于 2005-11-4 10:24 编辑 ]
作者: wangdachuan    时间: 2005-11-05 20:35
看了这么久,大家贴得都很辛苦,说一句吧
首先是理论可行性:不可能实现,遗憾我不是太清楚,没法给你精确说法,分析两方面原因可能不能实现(1、内存分配不出这么大空间,2、无论进程还是线程无法分配这么大的数量)即使你修改了某些相关代码,除非重写新的核心,呵呵
其次是实际操作价值:没价值,不集群 单机 无论多高性能服务器 早就 down 机了
作者: cx6445    时间: 2005-11-08 00:22
一个聊天服务器10万个连接还是能做得到的
作者: cx6445    时间: 2005-11-08 00:52
原帖由 北京野狼 于 2005-10-31 14:58 发表


apache稳定的版本都是进程的。
不要去想apache怎么做,你自己写的系统有能力实现apache的稳定型吗?


apache2的进程+线程模式是很稳定的,且性能非常好,dell2850并发能到3000连接。

一个聊天服务器并发10万个tcp连接是可能的,timewait不算的。1个线程可以接管不止一个客户端请求,象IM这类服务就很适用,http请求就不适用了,这样一来内存就够用了。

以QQ和MSN的技术力量,1台dell 2850类似的机器,能做到并发10万个TCP并不难。

[ 本帖最后由 cx6445 于 2005-11-8 00:54 编辑 ]
作者: 北京野狼    时间: 2005-11-08 09:40
原帖由 cx6445 于 2005-11-8 00:52 发表


apache2的进程+线程模式是很稳定的,且性能非常好,dell2850并发能到3000连接。

一个聊天服务器并发10万个tcp连接是可能的,timewait不算的。1个线程可以接管不止一个客户端请求,象IM这类服务就很适用, ...


成天就你们这样做梦的人。
IM服务客户都不是和服务器实时连接的,你知道dell2850并发能到3000连接就足够了。

不是实时连接的,那谈得上并发


http://bbs.chinaunix.net/forum/viewtopic.php?t=479047
作者: cx6445    时间: 2005-11-08 15:19
原帖由 北京野狼 于 2005-11-8 09:40 发表


成天就你们这样做梦的人。
IM服务客户都不是和服务器实时连接的,你知道dell2850并发能到3000连接就足够了。

不是实时连接的,那谈得上并发


[url]http://bbs.chinaunix.net/forum/viewtopic.php?t=4 ...


实时?看你怎么定义的了。
作者: 北京野狼    时间: 2005-11-09 10:15
原帖由 cx6445 于 2005-11-8 15:19 发表


实时?看你怎么定义的了。



人家问的linux能承受10万个TCP连接呢。
TCP连接你说什么是实时?
作者: cx6445    时间: 2005-11-09 13:06
[root@im root]# netstat -atn | grep -c ESTABLISHED
14325
[root@im root]#

按你的意思,这个算实时吗?
作者: jxjbsd    时间: 2005-11-11 18:00
标题: 理论上完全可以
一个TCP连接是靠"IP"和"端口"共同确定的. 只要请求服务的客户端不是用一个IP 同时发起16^2-1 个请求,在服务器这边就没有16^2-1 的端口限制
作者: 北京野狼    时间: 2005-11-14 14:08
原帖由 jxjbsd 于 2005-11-11 18:00 发表
一个TCP连接是靠"IP"和"端口"共同确定的. 只要请求服务的客户端不是用一个IP 同时发起16^2-1 个请求,在服务器这边就没有16^2-1 的端口限制


胡言乱语




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2