本压力测试基于ReSIProcate 1.5版本的basicCall项目修改,并且在ReSIProcate 1.5的Proxy测试通过,理论上应该也能针对其它Proxy进行压力测试。
如何使用
1、下载ReSIProcate 1.5
2、从http://www.pudn.com/downloads188/sourcecode/internet/tcp_ip/detail882742.html下载basicCall.zip文件解压,并将其中的basicCall.cxx覆盖到/resiprocate-1.5/resip/dum/test
3、编译运行basicCall Project
几点说明:
1、如果使用ReSIProcate的Proxy的话,注意几个参数
char* domains = "192.168.1.101";
char* interfaces = "sip:192.168.1.101:5060;timer-C=2;transport=udp" ;
int noChallenge = true;
2、目前默认10条线路同时测试,可以修改
const int LineCount = 10;
设置几条线路同时测试。
3、注意最好自己处理下TestInviteSessionHandler的onFailure,把throw注释掉
压力测试过程中Fail很正常,没什么影响。对Fail的关注可以放在临界测试中。
4、如果使用ReSIProcate的repro作为Proxy的话,并且压力测试程序与Proxy在同一台电脑的话,请在Proxy与UA的SipStack构造函数增加如下代码
for(int i=0;i<20;i++)
mPorts.insert(12000+i);
5、测试过程中有几次出现sdp解析的bug,如果你也有这个问题的话,可以参考的修改如下:
把固定的sdp
"v=0/r/n"
"o=1900 369696545369696545 IN IP4 192.168.2.15/r/n"
"s=X-Lite/r/n"
"c=IN IP4192.168.2.15/r/n"
"t=0 0/r/n"
"m=audio 8000RTP/AVP 8 3 98 97 101/r/n"
"a=rtpmap:8pcma/8000/r/n"
"a=rtpmap:3gsm/8000/r/n"
"a=rtpmap:98iLBC/r/n"
"a=rtpmap:97speex/8000/r/n"
"a=rtpmap:101telephone-event/8000/r/n"
"a=fmtp:101 0-15/r/n"
为实际中常见的sdp
"v=0/r/n"
"o=uas 12345 0 INIP4 192.168.1.100/r/n"
"s=Stress_Testing/r/n"
"c=IN IP4192.168.1.100/r/n"
"t=0 0/r/n"
"m=audio 16002RTP/AVP 0 96/r/n"
"a=rtpmap:0PCMU/8000/r/n"
"a=rtpmap:96telephone-event/8000/r/n"
"a=fmtp:960-11/r/n"
6、添加了个线程类,目的是为了每个UA及DUM快速处理,避免原先放在一个while循环中的延时处理带来的重发包及Proxy内存持续增长。
ps.有问题请发邮件至lidongshen At gmail.com
update 2009-7-30 by sld
该压力测试程序已经稳定。反复的调试了一个月的样子。额定最大并发测试数为10,目前每个UA都放入了线程,所以10个并发数就需要20个线程,10路并发足以满足一般压力测试需求了。用WireShark抓的包,所有的Call都很完美,之前放在循环中做,并发数多的时候,很容易重发,以及Registration和InviteSession的Fail
update 2009 -8-12 by sld
这段时间做了些修改,修改变动细节比较多,而且多是些信息输出以及流程控制方面的,就不更新了,大家可以看实际需要做出修改,另外值得提醒的就是Register发送一次即可,之后Handler会自动定时发送的
目前在
CPU 230 @1.6GHZ 单核,1G ram电脑下测试,五路压力测试下
30小时 呼叫8万个Call 内存线性增长至(实际内存450M,虚拟内存450M),cpu 3%至5%波动,还算满意
至此公司基于ReSIProcate0.9的Proxy我更新到了基于ReSIProcate最新版,经过了严格的压力测试和临界测试,算是过关了,汗个~
update 2009-8-19 by sld
目前测试成绩为
Proxy压力测试成绩 持续时间157小时 322900 Call 同时5路测试
硬件
CPU 230 @1.6GHZ 单核
RAM 1G
因为内存受限制,不然成绩更高了,有些轻微的内存泄漏,内存会随着时间线性增长,不过正常使用情况下看不出来