Pushlet 性能测试计划v1预览

      根据之前MQ的性能测试经验,撰写了Pushlet(高性能,分布式消息推送中间件)的测试计划。这里放出来,希望能给大家一些参考,同时也希望大家多提意见~

  1. Summary
  2. TestMethodology

    2.1 Test Conditions

    2.2 Test Scenario’s

    2.3 Test Duration

    2.4 Environment

    2.5 Measurement

    2.6 Topology

PerformanceResults

3.1 Connection

3.2 Non-Reliable P2P

3.3 Reliable P2P

3.4 Non-Reliable Pub-Sub

3.5 Reliable Pub-sub

References

  1. Summary

Pushlet是一个基于socket.io协议的高性能,分布式消息推送服务Suite,为web,无线应用(Android,IOS)提供了一种简单统一的Push机制。

针对Pushlet这种能够承载C500k并发连接,并能实时可靠推送消息的特性,我们重点考察如下几个应用指标:并发连接总数,连接稳定性,TPS(send/get),推送可靠性,推送实时性。同时考察的系统指标有:CPU,Mem,Network,minor/
full GC频度与时间。

  1. TestMethodology
  1. 1 TestConditions
  • Client-> socket -> connection
  • Pushlet连接分两阶段,所有结果均建立在连接完全建立后。
  • 每种测试场景运行多次(3~5),达到统计平均效果
  • 测试期间,独占系统共享资源(CPU,MEM etc.)
  • 可靠消息测试需要分standalone和cluster两种场景
  • 所有测试场景均要考虑warmup和cooldown
  1. 2 TestScenario’s

场景1:并发连接总数&连接稳定性

按照一定的rampup频率(可设定),脚本控制施压机发起连接请求(单网卡连接大致在64511),服务端观测tcp连接状态(重点关注SYN_RECV,ESTABLISHED,TIME_WAIT,CLOSE_WAIT状态),同时观察各个CPU(利用率是否均衡),JVM内存情况(新老生代回收频率,回收时间)。找到系统稳定连接总数(必要时校准kernel,JVM参数)。

场景2:点对点消息推送

选取10个左右的点对点通道,消息体(50byte,150byte,255byte,1k,5k)持续运行30分钟,测算推送TPS,推送成功率,推送时延。

场景3:点对点可靠消息推送

同上,选取10个左右的点对点通道,消息体(50byte,150byte,255byte,1k,5k)持续运行30分钟,测算推送TPS,推送成功率,推送时延。这里需要考虑测试离线消息推送,在线消息接受的场景。

场景4:广播消息推送

选取10个左右的广播通道(订阅方个数分别为5,10,15),消息体(50byte,150byte,255byte,1k,5k)持续运行30分钟,测算推送TPS,推送成功率,推送时延。

场景5:可靠广播消息推送

暂不支持

2.3 TestDuration

所有的测试场景需要持续10分钟以上,并伴有一定时长的warmup和cooldown。

2.4 Environment

  • Serversystem

RedHat Enterprise Linux Server release 5.7 (Tikanga)

2.6.18-308.4.2.ali1012.el5xen

4CPU Intel(R)Xeon(R)L5630@2.13GHz

x86_648G RAM 6T disk

  • Clientsystem

RedHat Enterprise Linux Server release 5.7 (Tikanga)

2.6.18-308.4.2.ali1012.el5xen

4CPU Intel(R)Xeon(R)L5630@2.13GHz

x86_648G RAM 6T disk

  • NetworkSettings

分两种情况:办公网络,公网

网速1GBPS

  • Serverkernel(sudo vi /etc/sysctl.conf ... sudo /sbin/sysctl -p,另外也可以通过echo,cat形式验证,如echo 1 >cat /proc/sys/net/ipv4/tcp_tw_reuse cat
    /proc/sys/net/ipv4/tcp_tw_reuse)

fs.file-max =1000000

ulimit -n 1000000

net.ipv4.tcp_max_syn_backlog=3240000

net.core.netdev_max_backlog=3240000

net.core.somaxconn= 3240000

net.ipv4.ip_local_port_range= 1024 65535

net.ipv4.tcp_wmem= 4096 65536 524288

net.core.wmem_max= 1048576

net.ipv4.tcp_rmem= 4096 87380 524288

net.core.rmem_max= 1048576

net.ipv4.tcp_max_tw_buckets= 6000

net.ipv4.tcp_tw_reuse= 1

net.ipv4.tcp_syncookies= 1

net.ipv4.tcp_max_orphans= 262144

这里简单说明一下TCP的连接队列和半连接队列。半连接队列,收到syn包但是还没有收到ack包,半连接队列长度由min(min(somaxconn,listen的backlog参数),tcp_max_syn_backlog)决定,再取大于这个值的2的n次幂的值;
连接队列,已完成3次握手,但是由于应用程序accept线程(boss线程)忙,尚未accept。队列长度由min(somaxconn,应用socket的listen方法的backlog参数)决定。更详细说明,请参看:

https://gist.github.com/vongosling/9929680

补充说明:

The current TCP/IP parameters can be edited without the need for reboot in the following locations:

  /proc/sys/net/core/ 

 rmem_default = Default Receive Window

 rmem_max = Maximum Receive Window

 wmem_default = Default Send Window

 wmem_max = Maximum Send Window

  /proc/sys/net/ipv4/
   You’ll find timestamps, window scalling, selective acknowledgements, etc.Keep in mind the values in /proc will be reset upon reboot.You still need to add the code in /etc/rc.local or /etc/boot.local in order to have the changes 
applied at boot time as described above.

  • Software

JavaHotSpot(TM) 64-Bit Server VM (20.0-b11, mixed mode) 1.6.0_25

JavaHotSpot(TM) 64-Bit Server VM (20.0-b11, mixed mode) 1.7.0_51

Jdk6 jvm options

Xmx6g –Xms6g-Xmn256m

-XX:PermSize=128m-XX:MaxPermSize=256m

-Xss256k

-XX:+DisableExplicitGC

-XX:+UseConcMarkSweepGC

-XX:+UseParNewGC

-XX:+CMSParallelRemarkEnabled

-XX:+UseCMSCompactAtFullCollection

-XX:+UseCMSInitiatingOccupancyOnly

-XX:CMSInitiatingOccupancyFraction=85

-XX:+UseFastAccessorMethods

-XX:+CMSPermGenSweepingEnabled

-XX:+HeapDumpOnOutOfMemoryError

Jdk7 jvm params

Xmx6g –Xms6g-Xmn256m

-XX:PermSize=128m-XX:MaxPermSize=256m

-Xss256k

-XX:+DisableExplicitGC

-XX:+UseG1GC

-XX:MaxGCPauseMillis=500

-XX:InitiatingHeapOccupancyPercent

-XX:G1HeapRegionSize=32

2.5 Measurement

综合使用iostat,jstack,jmap,mat,jps,top,jstat等工具,见后续博文

           2.6 Topology

3. PerformanceResults

3.1 Connection


连接总数


CPU


内存


GC情况


TCP状态


C100K


C300K


C500K


3.2 Non-Reliable P2P


消息体


TPS(Put/Get)


送达率


平均延时


50byte


150byte


255byte


1kb


5kb

3.3 Reliable P2P


消息体


TPS(Put/Get)


送达率


平均延时


50byte


150byte


255byte


1kb


5kb

3.4 Non-Reliable Pub-Sub


消息体


TPS(Put/Get)


送达率


平均延时


50byte


150byte


255byte


1kb


5kb

3.5 Reliable Pub-sub

暂无

4.References

http://write.blog.csdn.net/postedit/7200738

http://docs.oracle.com/javase/7/docs/technotes/guides/vm/

http://blog.mgm-tp.com/2013/12/benchmarking-g1-and-other-java-7-garbage-collectors/

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

http://blog.mgm-tp.com/2014/04/controlling-gc-pauses-with-g1-collector/

CMSand G1 Collector in Java 7 Hotspot: Overview,Comparisons andPerformance Metrics

时间: 2024-10-26 02:10:07

Pushlet 性能测试计划v1预览的相关文章

Kubernetes V1.3 预览-认证,伸缩和改进的安装方式

本文讲的是Kubernetes V1.3 预览-认证,伸缩和改进的安装方式[编者的话]本文为Core OS在其官方博客中发布的关于在Kubernetes 1.3的预览文章,介绍了目前Kubernetes新版本带来的新的引人入胜的特性和改进功能.本文作者为Mike Saparov,目前作为副总裁任职于CoreOS公司. 随着Kubernetes 1.3版本发布时间的临近,我们在这里分享一个关于CoreOS的文档,它可以帮助整个社区朝着这个重要的里程碑前进.Kubernetes是很多企业在早期环境中

IE9平台预览第七版发布 JS性能提升345%

10月28日,微软发布了IE9平台预览第六版,昨日晚间,IE9的第七个平台预览版也和大家见面了.IE9平台预览第七版专注于提高网站的性能,支持对HTML5页面进行完整硬件加速,JavaScript引擎 Chakra的性能也取得了突飞猛进.由于专注于实用性能,IE9平台预览版在JavaScript基准测试中的成绩获得了明显的提升.在WebKit SunSpider测试中,IE9平台预览第七版领先于其它所有浏览器.相比 2009年PDC大会上首次演示Chakra,IE9在JavaScript性能上提

IE11 for Win7开发者预览版的测试

今天微软发布了Windows 7平台的IE 11 开发者预览版本,其中最大的改变就是添加和修订了F12的开发者工具和功能.当然除了一些新工具之外本次开发者预览版本也对IE 11内部进行了改善调整.在博客中微软F12工具主要有新的UI响应速度和内存分析工具,帮助开发者及时对性能问题进行修正.      此外在新版中还引入了在线DOM Explorer和CSS检查工具能够在开发页面布局提供帮助.为了能够让开发者更好的使用这些F12工具,微软还发出了一个名为"F12探索"的网站.在博客的最后

微软发布IE11 for Win7开发者预览版

[科技讯]7月26日消息,北京时间昨晚微软发布了IE11 for Win7开发者预览版.此前IE11仅适用于Win8.1预览版系统.     微软方面表示,相比之前版本的IE,IE11 for Win7开发者预览版性能大幅提高,页面加载速度更快,并且包含全新的 F12 开发者工具.     微软还为IE11添加了一些新特性,比如对WebGL的支持,以及对未针对触控做优化的站点提供更佳的触控体验,还有键盘导航支持.升级版的收藏夹等等.       此外,IE11开发者预览版还将支持Windows

flash + php头像上传预览裁剪组件1.8发布了

  安装及部署: 1. 上传到 apache,iis,tomcat 服务器,通过域名访问 index.html v1.8 1.优化摄像头拍照不清晰(目前支持高清) v1.7  1.优化三张预览图片失真 2.优化加载默认图片,图片上传体验 v1.6   1.修改默认图片小于300px,图片拉伸bug v1.5    1.修复图片像素超过2880上传失败bug 2.修复旋转,裁剪框超出bug v1.3 1.新增加上传成功,遮罩提醒 2.新增图片上传大小不限制 v1.2  1.解决ie,火狐兼容bug

小技巧:图片在上传之前先预览,无需先上传到服务器上

我在网上看到好多人问如何使用FileUpload上传之前,先预览图片,前提条件,不允许先上传到服务 器上!因为大多搜索的结果实现的方法都是先上传到服务器上,然后显示,如果不确定上传,就删除,这 样的风险太大,性能也消耗很大!下面的代码告诉大家我们不需要先把图片上传到服务器上就可以预览了 ,是不是很酷!不说了,上代码! <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0

Win7系统缩略图预览图片的开启或关闭的方法

  缩略图预览图片的开启或关闭步骤如下: 1.首先,返回到电脑桌面位置,然后在桌面找到计算机图标并右键点击,选择最后的属性选项; 2.在打开的计算机属性窗口中,点击左侧菜单中的高级系统设置,然后在打开的系统属性窗口中将界面切换到高级这一栏,并点击性能下的设置按钮; 3.之后就会出现如下图中所示的界面了,在视觉效果这一栏中选中自定义,然后在列表中找到"显示缩略图,而不是显示图标"并勾选上,最后点击确定保存设置即可.

Win8系统怎么开启Aero Peek桌面预览功能

  Win8系统怎么开启Aero Peek桌面预览功能 1.在win8桌面上,右键点击计算机图私服,选择"属性",再展开"高级系统设置"; 2.然后在弹出的设置界面上点击"性能",再选择"设置",然后再选择"视觉效果"; 3.接着在Win8系统上,右键点击任务栏空白位置处,然后在属性面板上勾选"当你将鼠标移动到任务栏末端显示桌面按钮时,使用PEEK预览桌面". windows7教程 wi

win7任务栏预览窗口尺寸设置方法

Win7系统不仅功能强大,界面设计也是独具匠心,效果酷炫并且功能丰富.大名鼎鼎的Aero特效功能是Win7系统非常著名的特色之一,它不仅有漂亮的半透明的窗口,而且还提供了Win7任务栏窗口缩略预览功能. 将鼠标指针放到Win7系统任务栏上的程序图标上,不用按下鼠标按钮,Win7系统就会弹出一个半透明的当前程序打开窗口的略缩图,略缩图中的内容可以是文档.照片,甚至可以是正在运行的视频,方便用户迅速浏览而不需要真的点击将程序最大化. Win7任务栏窗口缩略预览 有些朋友会觉得Win7任务栏的Aero