免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4865 | 回复: 15
打印 上一主题 下一主题

[C] 服务器这样的数据合格了吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-21 21:35 |只看该作者 |正序浏览
本帖最后由 大众推荐 于 2014-02-21 21:59 编辑

前2天被问及我用C,为手机APP写的短链接服务器效率如何。
我给出了之前本地测试的一组数据:

测试了一组数据:
本地,1PV (1.7KB)完成时间约为150-350 us, 按300us算,那么1秒钟内 1,000,000/300 = 3333 PV,另外,每1W PV约 3S,也印证了上述结论。
打开4个客户端不断读数据(CPU4核),保持一样的测试结果。当客户端超过4的时候(几十个),时间稍微变大,但是符合线性增张。完全符合科学。

被鄙视了一下下,说,他们用的Python 写的 Tornado,单核CPU都可以达 3K,4核*2.4G CPU, linux, 可以达 8K2。

这不科学啊!!!!
这个是我的第一反应。
当然,从语言运行效率上来说,C > C++ > java > Python.

明显,如果一个C写的东西,运行效率比一个解析语言更加慢,这是不原谅的!言下之意,这个设计太垃圾了!!!!


昨天晚上,根据Tornodo 的测试方式 ( ab -n 10000 -n 10 http://xxxx.com/, 然后 xxx.com的服务器只返回一个 "Hello World!" 字符串)。


于是我也修改了服务器,让每次收到链接请求的时候,只返回一个 "Hello World!" 字符串。

CPU: AMD 4*2.4G
MEM: 8G
SYSTEM: UBUNTU 10.04, with GUI.

Server: 4 working threads + 2 other threads

-------------------------
另外,一台单核 CPU 1.7G, UBUNTU 10.04的笔记本跑 13个客户端不断的发连接请求。。

测试结果:

QQ图片20140221212128.jpg (13.79 KB, 下载次数: 90)

QQ图片20140221212128.jpg

805.jpg (89.6 KB, 下载次数: 82)

805.jpg

论坛徽章:
0
16 [报告]
发表于 2014-02-26 17:27 |只看该作者
实际上网络模块部分都是经过了上万人使用的,而且经过了广泛的测试,像lighttpd,做这种echo测试的没有一万个也有八千个。我觉得这上面可以下的功夫已经不多。
R>基本上同意!
只需要这部分不拖后腿,可以和lighttpd这些是同一个数量级,我就很满意了。(因为做这个测试,起因就是被用Tornado的小鄙视了一下下)

另外,LIGHTTPD貌似是基于fastcgi 进程(池)的,这样的话,如果连接比较多,进程间的切换开销应该不小。
所以,理论上,我这个不会比LIGHTTPD差,如果真的比它差,那么只能够说我设计的不好。



web调优主要还是体现在改服务器的代码,调内核参数,优化sql,业务分流上面。
R>同意!
其实这部分占了80%的工作量,相信这部分应该不会差。
回头会用测试数据来支撑这个说法。

谢谢~

回复 15# 李营长


   

论坛徽章:
0
15 [报告]
发表于 2014-02-26 17:03 |只看该作者
回复 14# 大众推荐


    实际上网络模块部分都是经过了上万人使用的,而且经过了广泛的测试,像lighttpd,做这种echo测试的没有一万个也有八千个。我觉得这上面可以下的功夫已经不多。web调优主要还是体现在改服务器的代码,调内核参数,优化sql,业务分流上面。

论坛徽章:
0
14 [报告]
发表于 2014-02-26 16:23 |只看该作者
本帖最后由 大众推荐 于 2014-02-26 16:27 编辑

是的~~
这个只是为了测试网络响应模块~

具体业务部分,不包含。
主要原因是:
1.先单独排除网络模块带来效率瓶颈。
2.业务逻辑部分的效率,我还是蛮有信心的。


回复 13# 李营长


   

论坛徽章:
0
13 [报告]
发表于 2014-02-26 16:22 |只看该作者
这是没有业务逻辑的吧,只能证明你的网络模块在echo场景下是满足要求的。因为它根本就没有业务场景。

论坛徽章:
0
12 [报告]
发表于 2014-02-26 16:12 |只看该作者
20w长链接在线  4w并发

请问这种情况下,你们是怎么实现的?epoll ?
据说,连接太多了,epoll 的开销也是很大的?我没有测试过。。

回复 10# weishuo1999


   

论坛徽章:
0
11 [报告]
发表于 2014-02-26 15:52 |只看该作者
我来回答一下吧
R>首先,非常感谢~

1.本地测试没有意义,你看你300us就能得到数据,这个一点意义都没有
R> 恩,这个同意,当时也是为了想看看大概的数据而已,而且那些数据也不一定很准确。

2.不要纠结于什么语言,python,c++,java都不是关键,关键可能都是nginx,lighthttpd这种,而不是你的后端语言
R>哈哈,是的,语音其实不是关键,只是当时的第一反应而已,因为这意味着设计太垃圾了!
另外有一点,因为我是直接为APP提供数据的,APP可以直接通过SOCKET拿数据。
除非是在REQ太大,需要架设前端来均衡之类的,否则,和nginx 这些没什么关系了。

3.怎么判断服务器的极限呢?可以这样,做一个测试程序,测试在不同并发量的情况下,这个程序,connect,send,recv一个过程的时间,当这个时间发生跳变(比如原来是10,现在是11那不叫跳变,如果原来是10,一下子变成20,那么就是跳变)这个时候就差不多是极限了
R> 这个有机会得试试!

4.说一下我们团队用c++自己做的Imserver的性能吧, 4核2.4G 8G内存 20w长链接在线  4w并发(每秒发一个数据包) cpu在75%左右,在这种情况下,connect,send,recv的时间大约是10-20ms
R>牛!

最后说一句如果你指望nginx这种来做高性能,多半是在自欺欺人。不同的情况下,不同的数据包大小都有不同的优化方案,这一点比你用了什么语言来说要重要的多
R>恩,有道理!谢谢指教!



回复 10# weishuo1999


   

论坛徽章:
4
双子座
日期:2014-08-28 10:08:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:112015年亚洲杯之阿联酋
日期:2015-03-13 03:25:15
10 [报告]
发表于 2014-02-26 15:39 |只看该作者
我来回答一下吧
1.本地测试没有意义,你看你300us就能得到数据,这个一点意义都没有
2.不要纠结于什么语言,python,c++,java都不是关键,关键可能都是nginx,lighthttpd这种,而不是你的后端语言
3.怎么判断服务器的极限呢?可以这样,做一个测试程序,测试在不同并发量的情况下,这个程序,connect,send,recv一个过程的时间,当这个时间发生跳变(比如原来是10,现在是11那不叫跳变,如果原来是10,一下子变成20,那么就是跳变)这个时候就差不多是极限了
4.说一下我们团队用c++自己做的Imserver的性能吧, 4核2.4G 8G内存 20w长链接在线  4w并发(每秒发一个数据包) cpu在75%左右,在这种情况下,connect,send,recv的时间大约是10-20ms

最后说一句如果你指望nginx这种来做高性能,多半是在自欺欺人。不同的情况下,不同的数据包大小都有不同的优化方案,这一点比你用了什么语言来说要重要的多

论坛徽章:
0
9 [报告]
发表于 2014-02-26 15:34 |只看该作者
我也是新人。。。。也不熟悉。。。。第一次写和网络相关的东西。。。

根据
http://bbs.chinaunix.net/thread-4126050-2-1.html

13L的说法。。。

每次请求的响应时间小于 30ms 就算及格.
标准是 15ms 算优秀.

那么现在做到 8.5ms 了。。。
应该是合格的了吧。。。

当然,返回数据的大小,会影响具体时间。。



回复 8# 除美灭日平韩


   

论坛徽章:
2
天秤座
日期:2014-01-15 13:50:58天秤座
日期:2014-02-19 17:09:23
8 [报告]
发表于 2014-02-26 15:25 |只看该作者
看不懂。。。
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP