閱讀805 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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),推送可靠性,推送實時性。同時考察的係統指標有:CPUMemNetworkminor/ full GC頻度與時間。

  1. TestMethodology

  1. 1 TestConditions
  • Client-> socket -> connection

  • Pushlet連接分兩階段,所有結果均建立在連接完全建立後。

  • 每種測試場景運行多次(3~5),達到統計平均效果

  • 測試期間,獨占係統共享資源(CPU,MEM etc.

  • 可靠消息測試需要分standalonecluster兩種場景

  • 所有測試場景均要考慮warmupcooldown

  1. 2 TestScenario’s

場景1:並發連接總數&連接穩定性

按照一定的rampup頻率(可設定),腳本控製施壓機發起連接請求(單網卡連接大致在64511),服務端觀測tcp連接狀態(重點關注SYN_RECVESTABLISHED,TIME_WAIT,CLOSE_WAIT狀態,同時觀察各個CPU(利用率是否均衡),JVM內存情況(新老生代回收頻率,回收時間)。找到係統穩定連接總數(必要時校準kernel,JVM參數)。


場景2:點對點消息推送

選取10個左右的點對點通道,消息體(50byte150byte255byte1k5k)持續運行30分鍾,測算推送TPS,推送成功率,推送時延。


場景3:點對點可靠消息推送

同上,選取10個左右的點對點通道,消息體(50byte150byte255byte1k5k)持續運行30分鍾,測算推送TPS,推送成功率,推送時延。這裏需要考慮測試離線消息推送,在線消息接受的場景。

場景4:廣播消息推送

選取10個左右的廣播通道(訂閱方個數分別為51015),消息體(50byte150byte255byte1k5k)持續運行30分鍾,測算推送TPS,推送成功率,推送時延。

場景5:可靠廣播消息推送

暫不支持

2.3 TestDuration

所有的測試場景需要持續10分鍾以上,並伴有一定時長的warmupcooldown

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

消息體

TPSPut/Get

送達率

平均延時

50byte




150byte




255byte




1kb




5kb









3.3 Reliable P2P

消息體

TPSPut/Get

送達率

平均延時

50byte




150byte




255byte




1kb




5kb





3.4 Non-Reliable Pub-Sub

消息體

TPSPut/Get

送達率

平均延時

50byte




150byte




255byte




1kb




5kb





3.5 Reliable Pub-sub

暫無


4.References

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

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

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

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

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

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



最後更新:2017-04-03 05:39:44

  上一篇:go 永和維護---從問題中得到的一些感受
  下一篇:go Cocos2d-x實例:設置背景音樂與音效-設置場景實現