linux_c_py_php 发表于 2013-02-18 18:29

eastany_op 发表于 2013-02-18 17:55 static/image/common/back.gif
回复 57# linux_c_py_php
不敢说指教。
目前为了获得峰值,连接设置保活,不拆。连接的业务短长都有,暂 ...

我的怀疑是错误的... 单独的线程做accpet也不快, 看样得优化参数了.

linux_c_py_php 发表于 2013-02-18 18:30

chinaunix_wolf 发表于 2013-02-18 18:08 static/image/common/back.gif
回复 9# linux_c_py_phpD状态是不可中断睡眠状态,主要出现在不可中断io操作的时候,比如磁盘写操作、网络 ...

13000那是短连接hsha的, 换长连接也得10万的qps啊.

现在讨论的是LF的长连接和短链接, 量级已经是15万了, 但短连接性能堪忧啊.

sonicling 发表于 2013-02-18 20:43

你先确定测试程序能喂饱你的server吗?D状态没什么担忧的,epoll可以唤醒他们。你可以把epoll_wait的timeout改得尽量短,看是不是D变成R,如果是,那就是server没有被喂饱,都wait在epoll上了。

linux_c_py_php 发表于 2013-02-18 21:18

sonicling 发表于 2013-02-18 20:43 static/image/common/back.gif
你先确定测试程序能喂饱你的server吗?D状态没什么担忧的,epoll可以唤醒他们。你可以把epoll_wait的timeou ...

必须能喂饱- -... 我是单线程的测试程序, 开的越多就该越高呀.

D应该不是epoll_wait吧, epoll_wait应该是S, 我觉得是epoll_ctl引起的D.

linux_c_py_php 发表于 2013-02-18 21:44

本帖最后由 linux_c_py_php 于 2013-02-18 21:45 编辑

我知道原因了, 我创建了2个epoll fd, 创建了2批线程池分别使用其中的1个fd, 创建了一个监听线程跑独立的epoll fd专门accept, 现在qps已经到250000了。

每个核的idle下降了20了,预测可以再多开2个epoll, 把cpu idle跑0,qps到达30万。

linux_c_py_php 发表于 2013-02-18 22:00

本帖最后由 linux_c_py_php 于 2013-02-19 11:05 编辑

单跑echo 36万qps了,idle还剩下10+。

364725 1361195887
365032 1361195888
377951 1361195889

代码见附件,代码还是有缺点的,就是监听线程派发连接是round robin的,根据客户端连接断开情况会导致不均匀,可以通过两种办法(我能想到的)进行负载均衡,大家集思广益。


yulihua49 发表于 2013-02-19 10:36

本帖最后由 yulihua49 于 2013-02-19 10:42 编辑

linux_c_py_php 发表于 2013-02-18 22:00 static/image/common/back.gif
单跑echo 36万qps了,idle还剩下10+。

364725 1361195887

Cpu0:3.3%us, 69.1%sy,0.0%ni,0.3%id,0.0%wa,0.0%hi, 27.2%si,0.0%st
Cpu1:4.3%us, 67.5%sy,0.0%ni,0.0%id,0.0%wa,0.0%hi, 28.1%si,0.0%st
Mem:   8059424k total,   530268k used,7529156k free,    89304k buffers
Swap:8191992k total,      0k used,8191992k free,    71976k cached

PID USER      PRNIVIRTRESSHR S %CPU %MEM    TIME+COMMAND                                          
15272 sdbc      20   0 96372 7720400 R 11.60.1   1:25.07 server                                          
15273 sdbc      20   0 96372 7720400 R 11.60.1   1:25.00 server                                          
15274 sdbc      20   0 96372 7720400 R 11.60.1   1:25.09 server                                          
15276 sdbc      20   0 96372 7720400 R 11.60.1   1:25.01 server                                          
15270 sdbc      20   0 96372 7720400 R 11.30.1   1:25.11 server                                          
15271 sdbc      20   0 96372 7720400 R 11.30.1   1:25.08 server                                          
15275 sdbc      20   0 96372 7720400 R 11.30.1   1:25.05 server                                          
15277 sdbc      20   0 96372 7720400 R 11.30.1   1:25.05 server                                          
15284 sdbc      20   03912372304 R 11.30.0   1:21.04 client                                          
15279 sdbc      20   03912372304 R 11.00.0   1:21.14 client                                          
15282 sdbc      20   03912372304 R 11.00.0   1:21.40 client                                          
15283 sdbc      20   03912368304 S 11.00.0   1:21.43 client                                          
15285 sdbc      20   03912372304 S 11.00.0   1:21.18 client                                          
15286 sdbc      20   03912368304 R 11.00.0   1:21.21 client                                          
15288 sdbc      20   03912372304 S 11.00.0   1:21.48 client                                          
15280 sdbc      20   03912372304 S 10.60.0   1:20.86 client                                          
15281 sdbc      20   03912372304 R 10.60.0   1:21.18 client                                          
15287 sdbc      20   03912372304 S 10.00.0   1:21.10 client   


去掉了printf,系统70%,软中断25%左右,没有D。   qps=79681

linux_c_py_php 发表于 2013-02-19 11:03

yulihua49 发表于 2013-02-19 10:36 static/image/common/back.gif
Cpu0:3.3%us, 69.1%sy,0.0%ni,0.3%id,0.0%wa,0.0%hi, 27.2%si,0.0%st
Cpu1:4.3%us, 6 ...

sys高说明机器压满了, 哈哈, 我忘了看网卡了, 估计40万qps网卡得有100M了.

代码我更新了一下, 昨天代码退出的时候循环++i了, 本来应该++epi, 悲剧.

nizvoo 发表于 2013-02-19 11:49

楼主英武,楼主精力充沛!

yulihua49 发表于 2013-02-19 11:54

本帖最后由 yulihua49 于 2013-02-19 12:49 编辑

我想把客户端移到别的机器上,
怎么看网卡流量?
linux_c_py_php 发表于 2013-02-19 11:03 static/image/common/back.gif
sys高说明机器压满了, 哈哈, 我忘了看网卡了, 估计40万qps网卡得有100M了.

代码我更新了一下, 昨天代 ...

异地测试,太慢了,server CPU idle=70%,LAN=100M 估计是卡到网络上了。
客户端用100个进程,qps=115606:
Cpu0:3.1%us, 46.7%sy,0.0%ni, 32.0%id,0.0%wa,0.0%hi, 18.1%si,0.0%st
Cpu1:3.1%us, 45.0%sy,0.0%ni, 33.5%id,0.0%wa,0.0%hi, 18.5%si,0.0%st
Mem:   8059424k total,   541388k used,7518036k free,    91780k buffers
Swap:8191992k total,      0k used,8191992k free,    79752k cached

PID USER      PRNIVIRTRESSHR S %CPU %MEM    TIME+COMMAND                                          
15879 sdbc      20   0 96372 7760396 R 15.60.1   2:46.36 server                                          
15886 sdbc      20   0 96372 7760396 R 15.60.1   2:42.04 server                                          
15885 sdbc      20   0 96372 7760396 R 15.30.1   2:43.66 server                                          
15881 sdbc      20   0 96372 7760396 R 14.90.1   2:39.98 server                                          
15882 sdbc      20   0 96372 7760396 R 14.90.1   2:46.74 server                                          
15883 sdbc      20   0 96372 7760396 S 14.90.1   2:43.19 server                                          
15884 sdbc      20   0 96372 7760396 R 14.90.1   2:47.26 server                                          
15880 sdbc      20   0 96372 7760396 R 14.60.1   2:39.49 server                                          
16585 sdbc      20   0 15164 1352948 R0.70.0   0:03.15 top         
页: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16
查看完整版本: [基于Epoll内置Leader-Follower服务端实现, 已可达50万echo qps(全新支持Lua啦)]