转自:http://www.ideawu.net/blog/archives/742.html
html
这是关于 C1000K 序列文章的第二篇, 在前一篇文章 构建C1000K的服务器(1) – 基础 中, 介绍了支持 C1000K 的 Linux 系统的内核参数调整和系统设置. 在本篇文章中, 将对一个真正的应用服务器作 C1000K 测试.git
Comet 服务器是一类逻辑相对简单, 须要高并发链接的服务器. Comet 在网站系统中的应用很是普遍, 能够见这篇日志的介绍: http://www.ideawu.net/blog/archives/737.html.github
要开发一个支持百万并发链接的 Comet 服务器, 我选择 C/C++ 语言, 固然还有其它的选择如 Erlang, Java 等. 对于一个只支持 long-polling Comet 服务器, 首先要具有解析 HTTP 协议的能力, 我选择 libevent 来处理 HTTP 协议.服务器
服务器在启动的时候, 就预先分配了 100 万个通道对象的空间, 但订阅者对象是按需分配的, 经过内存池方式. 100 万个通道对象和程序的其它数据占用了 24MB 的内存.并发
启动 icomet 服务器:ide
./icomet
服务器监听了 100 个端口, 是为了测试方便, 缘由见前一篇文章的分析: 构建C1000K的服务器(1) – 基础.高并发
而后启动 benchmark 客户端:测试
./tools/benchmark 127.0.0.1 8100
benchmark 程序每建立十万个链接, 就会暂停, 按回车后继续. 经过 top/ps 查看 icomet 进程的内存占用. 最终, 得出以下数据.网站
链接数 | 进程VIRT | 进程RES |
---|---|---|
0 | 39m | 24m |
100000 | 302m | 288m |
200000 | 579m | 565m |
500000 | 1441m | 1427m |
1000000 | 2734m | 2720m |
能够看到, 每个 Comet 链接大约占用了 2.7KB 的内存. 此时, 服务器空闲, 进程占用 CPU 为 0%.idea
项目的代码在: https://github.com/ideawu/icomet, 欢迎你们试用, 并反馈你的测试数据.