免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4696 | 回复: 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, 下载次数: 76)

QQ图片20140221212128.jpg

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

805.jpg

论坛徽章:
0
2 [报告]
发表于 2014-02-21 21:56 |只看该作者
说明一下:
1.打印信息是从服务器打印的,有一个计数器,每收到1W的连接请求,就打印一次。
2.最后 ->0:615988 表示最近这1W个请求消耗的时间。第一个单位是second,第二个是microseconds.
3. 由于只是简单的时间验证,即是 T = T2 - T1, 所以会出现 1:-307735 这样的结果,相当于  1- 0.307735 = 0.692265 us.

论坛徽章:
0
3 [报告]
发表于 2014-02-21 22:05 |只看该作者
从什么数据可以看出,基本上1W的请求,不会超过 0.75S ,(其中有一段时间会稍微大一点,因为后台还有2条线程在干活)。

就按照0.75秒 完全1W个请求来计算。。。
那么会有: 10,000/0.75 =13,333 req/s.

相同的配置下的Tornado 是8213

(13,333 - 8,213)/8,213  = 62.34%

貌似是比Tornado高效很多。。。。

这样对比,科学吗???

论坛徽章:
0
4 [报告]
发表于 2014-02-21 22:09 |只看该作者
另外,CPU使用率越在 87 - 90%

论坛徽章:
0
5 [报告]
发表于 2014-02-21 22:25 |只看该作者
根据上面数据,10W次,用时约7.2S

(100,000/7.2 - 8213)/8213 =69.10%

好吧,这个结论,至少对得起 C是高效率 的说法,不管系统设计是否垃圾~~

论坛徽章:
0
6 [报告]
发表于 2014-02-22 01:53 |只看该作者
本帖最后由 大众推荐 于 2014-02-22 02:12 编辑

自己写的测试程序,和推算出来的结论,还是不太好的。。。
修改了一下代码,用ab 测试出来的结果。
不知道是什么概念?
请高手指教

829.jpg (111.28 KB, 下载次数: 75)

829.jpg

论坛徽章:
0
7 [报告]
发表于 2014-02-26 15:18 |只看该作者
.....大家都不屑于指导一下了???

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

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

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

13L的说法。。。

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

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

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



回复 8# 除美灭日平韩


   

论坛徽章:
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这种来做高性能,多半是在自欺欺人。不同的情况下,不同的数据包大小都有不同的优化方案,这一点比你用了什么语言来说要重要的多
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP