麻烦性能测试(sipp)和linux大神求你帮个忙忙!

sipp | 静水潜流SIPP使用手册中文_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
SIPP使用手册中文
上传于||暂无简介
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩42页未读,继续阅读
你可能喜欢trackbacks-0
1&&&&& 安装及概述:
SIPp是一个测试SIP协议性能的工具软件。这是一个GPL的开放源码软件。
它包含了一些基本的SipStone用户代理工作流程(UAC和UAS),并可使用INVITE和B YE建立和释放多个呼叫。它也可以读XML的场景文件,即描述任何性能测试的配置文件。它能动态显示测试运行的统计数据(呼叫速率、信号来回的延迟,以及消息统计)。周期性地把CSV统计数据转储,在多个套接字上的TCP和UDP,利用重新传输管理的多路复用。在场景定义文件中可以使用正规表达式,动态调整呼叫速率。
SIPp可以用来测试许多真实的SIP设备,如SIP代理,B2BUAs,SIP媒体服务器,SIP/x网关,SIP PBX,等等,它也可以模仿上千个SIP代理呼叫你的SIP系统。
SIPp的网址:,这里可以下载最新版的SIPp软件,并且有英文资料可供查阅。
1.1&&&&& SIPp安装
SIPp提供Linux,Windows和HPUX平台的版本。Windows平台上的安装很简单,下面说一下Linux下的安装。
首先,可以从
下载最新版的SIPp,解压之后就得到一个rpm文件,你可以使用rpm命令来完成安装。如果你拿到的是绿色版的SIPp,那么你需要对其重新编译才能使用。SIPp是用C++写的,因此系统必须支持G++才可成功编译。
SIPp支持四种不同的安装模式:
1) 没有TLS支持与密码验证支持:
a) # tar -xvf sipp-1.1rc6.tar.gzb)&&&&&&
# cd sipp-1.1.rc6c)&&&&&&
# makeMake&&
出来的sipp文件就是一个可执行的文件,只需要搭配场景xml文件与csv文件即可进行SIP测试,这是最常用的安装。
2) 拥有TLS支持与密码验证支持,但是不支PCAP语音播放:
a) # tar -xvf sipp-1.1rc6.tar.gzb)
&& # cd sipp-1.1.rc6c)
&& # make ossl
这样编译出来的文件就加入了TLS至于与密码验证支持功能sipp软件了。
3) 支持PCAP Play,但是没有密码验证支持:(PCAP Play即为可以进行RTP语音,但是没有407 AUTH验证)
a) # tar -xvf sipp-1.1rc6.tar.gzb)
&& # cd sipp-1.1.rc6c)
&&&&&& # make pcapplay
4) 支持PCAP 声音文件播放,而且支持密码验证支持:(支持407 auth验证支持)
a) # tar -xvf sipp-1.1rc6.tar
b) # cd sipp-1.1.rc6
c) # make pcapplay_ossl
1.2&&&&& SIPp使用
用SIPp做测试的时候需要准备五个文件:uac.bat, uas.bat, uac.xml, uas.xml, data.csv。
uac.bat:调用sipp命令,并传入相应参数的批处理文件,模拟UAC(例如主叫)。
uas.bat:调用sipp命令,并传入相应参数的批处理文件,模拟UAS(例如被叫),当然也可不准备此文件直接输入sipp命令执行程序,但是写成文件执行更加方便可靠。
uac.xml:根据需要编写的uac侧的sip信号流程。
uas.xml:根据需要编写的uas侧的sip信号流程。
data.csv:用于uac.xml和uas.xml中需要引入的相应数据。
下面就举例来说明这五个文件的编写方法和用法。
1.2.1&&&&&&& uac.bat:
sipp -sn uac 172.31.89.4:5060 -r 1 -rp 3000 -inf data.csv -p 7098 -i 172.31.89.242 -s 8001 -sf uac_onecall.xml &m 1000 &l 900
各个参数说明:
172.31.89.4:5060:远端地址和端口(在脚本中用[remote_ip],[remote_port]引入)
-r 1 -rp 3000:每三秒钟发一个呼
-inf data.csv:引入数据配置文件
-p 7098:本地端口(在脚本中用[local_port]引入)
-i 172.31.89.242:本地地址(在脚本中用[local_ip]引入)
-s 8001:被叫号码(在脚本中用[service]引入)
-sf uac_onecall.xml:引入脚本文件,根据需要模拟的呼叫流程编写
-sn uac :执行默认的uac流程,如需执行自己编写的流程文件,命令中应不含此参数
-m 1000:发送1000次呼叫后停止并退出。
-l 900 :最大同时保持呼叫量,默认值为3*caps值*呼叫时长,当因种种原因导致现存呼叫总数达到此值时,SIPp将停止产生新的呼叫,等待现存呼叫总数低于此值时才继续产生呼叫。
1.2.2&&&&&&& data.csv:
SEQUENTIAL
第一行为取号码方式,通常为SEQUENTIAL或RANDOM
此例中只有一个数据,引入时用[field0],如果有多个数据,用分号隔开,在引用时编号递增如[field1],[field2]。
1.2.3&&&&&&& uac.xml:
&scenario name="branch_client"&
& &send retrans="500"&
&&& &![CDATA[
&&&&& INVITE sip:[service]@[remote_ip] SIP/2.0
&&&&& Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch];rport
&&&&& Allow: INVITE,CANCEL,ACK,BYE,OPTIONS,REFER,NOTIFY,MESSAGE,SUBSCRIBE,INFO
&&&&& From: "[field0]" &sip:[field0]@[local_ip]&;tag=[call_number]
&&&&& To: "[service]" &sip:[service]@[remote_ip]&
&&&&& Call-ID: [call_id]
&&&&& CSeq: 1 INVITE
&&& &&Contact: &sip:[field0]@[local_ip]:[local_port]&
&&&&& Max-Forwards: 70
&&&&& Content-Type: application/sdp
&&&&& Content-Length:[len]
&&&&& o=[field0] 00 INIP4 [local_ip]
&&&&& s=SIP Call
&&&&& t=0 0
&&&&& c=IN IP4 [local_ip]
&&&&& m=audio [media_port] RTP/AVP 0
&&&&& a=rtpmap:0 PCMU/8000
1.需要sipp命令赋值的参数,请参考关于uac.bat的说明
[local_ip]、[local_port]、[remote_ip]、[remote_port]、[service]
2.sipp自动检测生成的参数:
[call_number]、[call_id]、[cseq]、[len]、[branch]
3.从数据配置文件引入的参数,请参考data.csv,第一个值为field0
4.CSeq: 1 INVITE:此处本来应该写成CSeq: [cseq] INVITE,而在对应的ACK中写成CSeq: [cseq] ACK,但在INVITE和ACK的中间夹杂有PRACK的时候,ACK如果写成上述形式,将不能与INVITE对应,所以可以写死。
5. 在测试业务时,应在头域中添加&Route:被叫侧地址&以保证呼叫会从AS路由到被叫,否则AS会发消息到默认的地址。
&recv response="100" optional="true"&
注:按照预期,发出INVITE之后有可能受到100 Trying,也有可能收不到,所以加上可选标记
& &recv response="180"&
注:此时如果收到180以外的响应,会异常退出。
& &recv response="200"&
&&& &![CDATA[
&&&&& ACK sip:[service]@[remote_ip] SIP/2.0
&&&&& Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch];rport
&&&&& [last_From:]
&&&&& [last_To:]
&&&&& Call-ID: [call_id]
&&&&& Contact: &sip:[field0]@[local_ip]:[local_port]&
&&&&& CSeq: 1 ACK
&&&&& Max-Forwards: 70
&&&&& Content-Length: 0
注:发送请求的时候不需要也不可能重新填写所有字段(比如说From字段是不需要,因为一个dialog里的From字段都是相同的;而To字段是没办法自己填写,必需从上一个响应中引入,因为To-tag是远端加上的,本地并不知道),所以可以用[last_字段名]的方式从上一个消息中取得。
通常From,To字段从上一个消息中取得,200的ACK时,Via从初始INVITE拷贝就可以,此时branch参数会自动生成跟初始INVITE不一样的值;非200的ACK时,采用从上一个消息引入的方式。
& &pause milliseconds="30000"/&
注:在通话状态维持30秒,以模拟实际通话持续通话的时间。
&&& &action&
&&&&& &exec play_pcap_audio="C:\711.pcap"/&
&&&&& &exec play_pcap_video="C:\h263.pcap"/&
&&& &/action&
注:在通话状态如果有需要的话可以发送媒体流。前提是在相应的目录下有媒体流文件
& &send retrans="500"&
& &![CDATA[
&&&&& BYE sip:[service]@[remote_ip] SIP/2.0
&&&&& Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch];rport
&&&&& [last_From:]
&&&&& [last_To:]
&&&&& Call-ID: [call_id]
&&&&& CSeq: 2 BYE
&&&&& Max-Forwards: 70
&&&&& Content-Length: 0
注:加入retrans参数之后可在没收到响应的情况下,在设定的时间之后重传,此例中为500毫秒。
& &recv response="200"&
& &pause milliseconds="3000"/&
& &!-- definition of the response time repartition table (unit is ms)&& --&
& &ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/&
& &!-- definition of the call length repartition table (unit is ms)&&&& --&
& &CallLengthRepartition value="10, 50, 100, 500, , 10000"/&
&/scenario&
2&&&&& 常见问题:
1.Unable to bind main socket, errno = 125。
想绑定的本地端口已经被占用,换一个应该就可以了。
2、 while expecting '180' response, received 'SIP/2.0 200 OK
脚本中在发出INVITE之后要收100或者180,结果直接就收到了200。可以在180后面也加上optional="true"就行。
3、消息发出后无响应
需要确认远端即服务器端系统正常,并且uac.bat中的远端地址和端口正确,另外可能需要将本地地址加入为服务器的可信节点。
4、Can't open PCAP file '711.pcap'.
需要确认媒体流文件确实存在且路径正确,并且媒体流文件可用。
2.1&&&&& uas.bat
sipp -sn uac 172.31.89.4:5060 -inf data.csv& -i 172.31.89.242 -p 8890 -s 8001 -sf uas_onecall.xml
关于各个参数的说明请参考uac.bat的说明
2.2&&&&& uas.xml
&scenario name="branch_server"&
& &recv request="INVITE"&
&&& &&& &ereg regexp=".*" search_in="hdr" header="CSeq:" assign_to="6" /&
&&& &&& &ereg regexp=".*" search_in="hdr" header=&Via:" assign_to="5" /&
正则表达式使用说明:在本例中原本是不需要使用的,但在很多情况下需要使用,所以列出来说明一下。当sequence中带有PRACK时,UAS发送INVITE的200 OK时,某些字段(比如Via和Cseq)则不能使用[last_字段名]方式从上一个收到的消息中引入,因为此时上一个消息是PRACK,而不是INVITE,所以需要先将INVITE的这两个字段保存下来供以后使用。上面的用法便是将INVITE的CSeq字段的值保存为数字6,在以后发送INVITE的200 OK的时候使用,方式为:CSeq: [$6]
&&& &![CDATA[
&&&&& SIP/2.0 100 Trying
&&&&& [last_Via:]
&&&&& [last_From:]
&&&&& [last_To:]
&&&&& [last_Call-ID:]
&&&&& [last_CSeq:]
&&&&& Content-Length: 0
注:基本上所有的字段都可以从上一个消息中引入。
&&& &![CDATA[
&&&&& SIP/2.0 180 Ringing
&&&&& [last_Via:]
&&&&& [last_From:]
&&&&& [last_To:];tag=[call_number]
&&&&& [last_Call-ID:]
&&&&& [last_CSeq:]
&&&&& [last_Record-Route:]
&&&&& Contact: &sip:[local_ip]:[local_port]&
&&&&& P-Asserted-Identity: "[service]" &sip:[service]@[local_ip]&
&&&&& Content-Length:[len]
注:To字段从上一个消息中引入的时候,需要添加To-tag,call_number为sipp自动生成的,在连续呼叫的时候会加1。从上一个消息引入相关字段的时候,如果上一个消息没有这个字段,则在本消息中也不会有。
& &pause milliseconds="5000"/&
&&& &![CDATA[
&&&&& SIP/2.0 200 OK
&&&&& [last_Via:]
&&&&& Allow: INVITE,CANCEL,ACK,BYE
&&&&& [last_From:]
&&&&& [last_To:];tag=[call_number]
&&&&& [last_Call-ID:]
&&&&& [last_CSeq:]
&&&&& [last_Record-Route:]
&&&&& Contact: &sip:[local_ip]:[local_port]&
&&&&& P-Asserted-Identity: "[service]" &sip:[service]@[local_ip]&
&&&&& Content-Type: application/sdp
&&&&& Content-Length:[len]
&&&&& o=[service] 00 INIP4 [local_ip]
&&&&& s=SIP Call
& &&&&t=0 0
&&&&& c=IN IP4 [local_ip]
&&&&& m=audio 10000 RTP/AVP 0
&&&&& a=rtpmap:0 PCMU/8000
注:100,180,200的上一个消息都是INVITE消息,所以此时To字段中还是要加入To-tag,并且在一个dialog中call_number是相同的,所以能与180的To-tag保持一致。
& &recv request="ACK"&
& &recv request="BYE"&
&&& &![CDATA[
&&&&& SIP/2.0 200 OK
&&&&& [last_Via:]
&&&&& [last_From:]
&&&&& [last_To:]
&&&&& [last_Call-ID:]
&&&&& [last_CSeq:]
&&&&& Contact: &sip:[local_ip]:[local_port];transport=[transport]&
&&&&& Content-Length: 0
注:cantact字段一定不能从上一个消息中引入。
& &!-- Keep the call open for a while in case the 200 is lost to be&&&& --&
& &!-- able to retransmit it if we receive the BYE again.&&&&&&&&&&&&&& --&
& &pause milliseconds="3000"/&
& &!-- Definition of the response time repartition table (unit is ms)&& --&
& &ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/&
& &!-- Definition of the call length repartition table (unit is ms)&&&& --&
& &CallLengthRepartition value="10, 50, 100, 500, , 10000"/&
&/scenario&
阅读(...) 评论()酷勤网 C 程序员的那点事!
当前位置: >
浏览次数:次
最近看了 Brendan Gregg 大神著名的 Linux Performance Observability Tools,这么好的资料不好好学习一下实在是浪费了,又找到了大神的(需爬墙),于是把相关的命令和概念连预习,学习,复习走了一遍。
首先学习的是大神提出的 Basic Tool 有如下几个:
top (htop)
uptime 比较重要的能显示当前系统的负载状态,但是这个负载究竟是什么意思呢?查了一些资料负载指的是当前可运行的程序加上正在运行的程序再加上等待 IO 的程序,比如现在运行着一个,一个等待运行,还有一个等待 IO 那么负载就是3. uptime 后面三个数分别是 1min, 5min 和 15min 的负载平均值,由于内核用了一个指数平滑的平均算法,这个值不能直接反应当前等待的进程数。此外这个值没对多核进行 normalization 所以单核情况下当负载是 1 的时候说明 cpu 满载了,但是对于 4 核 cpu 刚到满负载的 25%。 一般情况下这个值越大就说明等待 CPU 的进程越多,如果大于核数就说明有进程在等待 CPU,需要看一下程序的问题或者考虑加机器了。另外即使负载过载了也不一定说明 CPU 的利用率高,因为很可能是大量的请求 IO 的进程在等待,像一些数据库服务,所以看完负载后还要针对应用场景综合考量。
top & htop
top 其实是一个相当全面的分析了还是事实的,其他很多命令能拿到的数据,top 一个命令就可以拿到。但是他的一个问题就是本身的 overhead 比较大,如果系统负载本身就很大那么可能就会卡住了。此外 top 可能会忽视掉那些生命周期很短的程序。top 的 manual 里详细介绍了每个指标的意义,翻看一下还是很有收获的。其中比较要关注的有 wa(io wait),查看是不是你的 IO 是瓶颈,还有 st (time stolen from this vm by the hypervisor) 这个指标会出现在虚拟机里的系统中,表示的是你的虚拟机在等待真实物理机的 CPU 资源的时间。如果这个值很高的话说明你的服务提供商的 CPU 资源有限你没抢过别人,很有可能使服务商超卖了。碰到这种情况要么打客服投诉,或者多掏点银子找个靠谱的运营商吧。
htop 是 top 的改进版,带着各种颜色表示和百分比进度条,以及更丰富的功能,小伙伴们可以尝试一下。
mpstat 可以显示出每个 CPU 核心的工作情况,其实也可以在 top 里输入 1 看到。通过这个命令我们可以观察是不是存在负载不均的现象,某个核心跑满了,另一个还在闲着,造成整体性能的下降。
加上 -x 参数后可以看到几乎全部的 io 指标,包括 tps, 请求 queue 的平均长度,平均处理时间, 磁盘带宽利用率等等。每个指标 manual 中都有详细的解释。
vmstat & free
vmstat 是一个展示内存整体使用情况的命令,其中要关注一下 swpd 和 swap 的 in/out 。如果这一部分的数值过大,会频繁的 IO 造成性能下降,要么看看是不是程序内存泄露了,要么就加内存吧。 memory 里的 buffer 指的是写磁盘缓冲区, 而 cache 可以当成是读文件的缓冲区。free也是类似的功能,不过只展示内存部分的内容。
这个相对来说简单一些,主要反映了主机间的延迟和连通性,很多时候也只能告诉我们这些了。可以尝试一下 hping 有着指定端口,高级 tracerout 的功能。
一个和 iostat 类似,不过是针对网卡的命令。
一个综合了cpu、 memory、 IO、 network 的工具,可以事实展示当前的系统资源利用情况。
以上就是最基础的命令了,高级一些的命令有:
等我研究研究再写总结。
& 相关主题:3233人阅读
VOIP Asterisk(1)
&&& 上一篇介绍了安装Trixbox的过程。经过简单的测试,pc2pc、pc2phone的通话功能正常。&&& 要把网络电话业务作为商用,就必须要保证系统的稳定和一定的承载能力,所以接下来需要做的是对Asterisk的压力测试,以了解Asterisk在我们的硬件基础上的承载能力。&&& google一番,发现有一共叫SIPp的软件,专门用于对SIP网关的压力测试,包括注册、通话、多方meeting等并发的压力测试。以下是从网上搜集并结合我的实际安装过程整理的资料。&&& SIPp是一个在Linux下运行的软件,为了便于操作,可将其通过Cygwin模拟运行在win32平台下。&&& 第一步,先要安装的是Cygwin,下载地址:/setup.exe 。该安装文件是在运行过程中再下载相关安装包进行安装的。第二步,安装。摘录网友的安装经验:&&& “这方面的文很多,这里只大概谈一下需要注意的地方:&&&& 1、下载时前面都是下一步就OK,按默认就好。到选择镜像站点的时候建议选择前面一点的,希望大家不要浪费时间去试验;&&&& 2、到选择安装方式——Select Packages页面时,一定要注意每个包后面的状态:&&&&&&&& Keep,意思就是说保持目前已经安装的版本不动。不会替换目前已有的版本,下次安装包的时候尽量使用此选项,因为它不会把你已经有的包重新安装一次;&&&&&&&& Curr,意思就是说把最新的版本统统下载下来安装&&&&&&&& 其它2个没试过。&&&&&&&& 而且应该注意一下名为Category的一列,该列后面写的是安装的方式,有安装、卸载、重新安装等,不用说,第一次当然是安装。&&&&&&&& 好了,剩下的就是等待了,相信我,这是相当漫长地。。。Cygwin就安装完毕,大家一定要记住安装的路径。”&&&& 第二步,安装cygwin的IPv6补丁。地址: http://win6.jp/Cygwin/index.html&&&& <font color="#、将其解压出来的3个文件夹:/bin,/lib,/usr复制到刚刚Cygwin的安装目录下即:../Cygwin/这里,以替换已有的文件夹。&&&& 2、将Cygwin/lib/cygwin1.dll删除,并为new_cygwin1.dll(也有可能叫做new-cygwin1.dll)重命名为cygwin1.dll&&&& 实际上2这个操作可以不做,当然,也跟我下载的SIPp版本有关系,后面我会提到。&&&& 第三步,安装Winpcap。其实我也还没深入去了解这个东西是做什么用的,先装呗。地址:http://www.winpcap.org/install/default.htm&&&& 第四步,安装SIPp。我安装的是最新版,sipp-win32-3.1.2-ossl.exe,地址:http://sipp.sourceforge.net/&&&& 注意选择安装路径为Cygwin的安装路径加上/home/username/,这里的username是进入cygwin中显示的名字,也就是Windows的用户名。&&&& 至此,安装完毕。进入Cygwin控制台,可见类似linux的命令行,说明Cygwin运行正常。&&&& 再进入windows的cmd控制台,进入刚才SIPp的安装路径,输入sipp.exe回车,我的控制台上显示cygwin.dll版本不一致。仔细一看,原来在cygwin/home/username/目录下的cygwin1.dll与cygwin/bin/下的cygwin1.dll的小版本不同,将username路径下的copy覆盖掉bin下的cygwin1.dll,执行sipp.exe成功显示sipp的帮助信息。&&&& 关于SIPp的使用,后面会继续补上。&&&& (未完待续)
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:392386次
积分:4657
积分:4657
排名:第3202名
原创:61篇
转载:137篇
评论:99条
(3)(1)(1)(1)(1)(2)(1)(2)(4)(1)(2)(1)(2)(4)(5)(7)(5)(2)(1)(1)(7)(3)(1)(13)(15)(5)(8)(11)(3)(6)(2)(1)(1)(3)(1)(1)(1)(2)(7)(6)(1)(7)(1)(1)(1)(2)(4)(2)(4)(15)(1)(2)(2)(1)(1)(1)(8)

我要回帖

更多关于 喧个关帮个忙 的文章

 

随机推荐