网络编程大并发实战-C100K

上篇进行了一个C10K的实战,并得到了一个初步的测试数据来支撑C10K的结果,那么本篇我们进行一个升级版C100K的实战。

对此我们还是使用之前的xlink 库,测试下epoll 及aio 的性能能否达到我们续期,C100K。

epoll

对于C100K问题,首先我们要解决的不是程序问题,而是系统设置问题,连接数的限制,文件句柄的限制,同时,对于客户端来说,由于单个IP端口数的限制,端口是16位的其最大端口数为 2的16次方全部利用起来也就只能支持60K多的连接(如果是土豪有很多测试机器可以当客户端端口限制基本可以忽略,不够测试就堆机器吧)针对如上问题解决如下:

句柄问题:

1.修改/etc/security/limits.conf (改为1024000 <NR_OPEN是为之后 1M问题做准备),

* soft nofile 1024000
* hard nofile 1024000

 

2.修改/etc/sysctl.conf:

fs.file-max = 1048576

[root@localhost ~]# sysctl -p
端口问题(客户端):

将可用端口全部开放,设置/etc/sysctl.conf:

net.ipv4.ip_local_port_range = 1024 65535

的只这样还是不够C100K,所以还需要多加几块网卡,或者添加虚拟地址。好吧咱就用最实惠的方式加虚拟IP吧。

还有一些TCP参数调优的东西,C100K就不列了,毕竟也就是个初步测试,主要是检验下实战代码的,咱就略了,等到C1M再说。

环境还是同前述,就直接来看看结果吧:

连接数 102399 注册数 102399
连接耗时
(ms)
2893 注册耗时
(ms)
6563

结论:C100K在3秒左右就轻松解决,而且该机器性能一般,同时该C100K全部活跃的QPS测试出来大致达到了20K/S。所以C100K中有20K的活跃度都是轻松搞定。

本来还想拿去年写的IOCP 压一下出个结果,看来还是放到接下来的C1M问题去试试吧,C100K应该完成没压力。(主要原因是懒,还没想好把IOCP跟xlink 合并在一起)。就先这样吧,C100K这种对于当前金融公司的产品应该完全够用了,基本都不需要分布式了,当然对于像淘宝这种有大客户体量的公司来说,只是C100K是不够的。接下来就试试C1M吧。