免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: linux_c_py_php
打印 上一主题 下一主题

[其他] [基于Epoll内置Leader-Follower服务端实现, 已可达50万echo qps(全新支持Lua啦)] [复制链接]

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
11 [报告]
发表于 2013-02-18 10:50 |只看该作者
pandaiam 发表于 2013-02-18 10:20
这是啥分析工具啊..


D就是top里看进程的状态处于不可中断状态, 应该是涉及磁盘操作才会出现这个.

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
12 [报告]
发表于 2013-02-18 10:52 |只看该作者
回复 7# yulihua49


如果LT模式多线程同时epoll_wait,貌似同一个socket的读事件会在两个线程里面都被epoll_wait读取。
ET模式多线程如果稍微有先后,应该不会发生这个情况,但同时的情况下,我也不知道一个读事件是否会同时唤醒两个线程。
我作过的压力测试是局域网里面四台客户机,每台3000个连接连到服务器,共12000个连接收发数据。数据可以正常收发,服务器的状态还好,CPU使用率不高(具体多少我不记得了)。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
13 [报告]
发表于 2013-02-18 10:54 |只看该作者
本帖最后由 yulihua49 于 2013-02-18 10:55 编辑
linux_c_py_php 发表于 2013-02-18 10:47
你直接拉我代码下去看一下吧, 我刚到公司分析一下原因.

qps才13000, 线程频繁D很异常, 就打了一条用 ...

qps是每秒访问次数吗?D是什么?几核的机器?
短连接还是长连接?

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
14 [报告]
发表于 2013-02-18 10:57 |只看该作者
yulihua49 发表于 2013-02-18 10:54
qps是每秒访问次数吗?D是什么?几核的机器?
短连接还是长连接?


短连接, qps是每秒请求次数, D是top里那个D, 我之前遇到过就是发生在分配大内存mmap或者磁盘繁忙会引起, 现在strace跟的话调用基本上就是accept/read/write/epoll_ctl, 不知道卡在哪一个调用上了.

机器12核的, 应该不是机器问题.

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
15 [报告]
发表于 2013-02-18 10:57 |只看该作者
w_anthony 发表于 2013-02-18 10:52
回复 7# yulihua49

EPOLLONESHOT就保证不会发生这些问题。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
16 [报告]
发表于 2013-02-18 10:58 |只看该作者
w_anthony 发表于 2013-02-18 10:52
回复 7# yulihua49


你可以看看EPOLLONESHOT, 可以解决这个问题.

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
17 [报告]
发表于 2013-02-18 10:59 |只看该作者
本帖最后由 yulihua49 于 2013-02-18 11:00 编辑
linux_c_py_php 发表于 2013-02-18 10:57
短连接, qps是每秒请求次数, D是top里那个D, 我之前遇到过就是发生在分配大内存mmap或者磁盘繁忙会引起 ...

明白了,使用长连接,连接一次,通讯多次看看。
每个连接通讯100次到1000次测一下。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
18 [报告]
发表于 2013-02-18 11:04 |只看该作者
yulihua49 发表于 2013-02-18 10:59
明白了,使用长连接,连接一次,通讯多次看看。
每个连接通讯100次到1000次测一下。


我先试着, 你说下你的看法..

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
19 [报告]
发表于 2013-02-18 11:08 |只看该作者
本帖最后由 yulihua49 于 2013-02-18 11:21 编辑
linux_c_py_php 发表于 2013-02-18 11:04
我先试着, 你说下你的看法..

TCP的连接是开销非常大的,不仅3次握手,而且涉及大量流资源的分配与回收,因此不建议在应用中使用短连接。
实际中我们在客户端使用连接池来平衡这个短连接的需求与性能的矛盾。
另外应该加上资源快速重用的选项:
  1. //避免 TIME_WAIT
  2.         so_linger.l_onoff=1;
  3.         so_linger.l_linger=0;
  4.         ret=setsockopt(sock, SOL_SOCKET, SO_LINGER, &so_linger, sizeof so_linger);
复制代码

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
20 [报告]
发表于 2013-02-18 11:13 |只看该作者
嗯, 长连接的qps上去了, 各线程D的也比较频繁:

  45897 1361157105
  55452 1361157106
  55568 1361157107
  55280 1361157108
  55597 1361157109
  68456 1361157110
  70471 1361157111
  71232 1361157112
  82036 1361157113
  89670 1361157114
100623 1361157115
114838 1361157116
147511 1361157117
149022 1361157118
144411 1361157119
153535 1361157120
150654 1361157121
147977 1361157122
143775 1361157123
150677 1361157124
144817 1361157125
149307 1361157126

  现在软中断比较猛了, 核用的还不充分, 啥原因引起的D, 这个必须找出来.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP