使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试

      最近我和@呆呆所在公司的销售谈妥了河南一客户的呼叫中心业务,客户需求是要求我们系统能够达到300并发并带录音。说实话,我接触呼叫系统行业时间也不长,之前有过接触几十坐席并发的情况,300并发的呼叫我真没接触过。不过@呆呆说Asterisk处理300并发,其实是完全没问题的,他以前有过实战案例。@呆呆建议我用winsip在公司机器上做一下压力测试,顺便测试一下新发布的DotAsterisk(点星PBX)  2.2 U6 新版本。大佬都说了可以,抱着好奇的心态,我打算研究一下。

    winsip,啥东西?听说是一个sip压力测试工具,还有一个sipp的也有类似功能。于是我就开始了我的摸索研究的历程,下面把我的测试过程做一下记录。

一、准备工作

1. 三台物理电脑,配置最好的 一台运行DotAsterisk 2.2(A机器服务器),另一台运行winsip软件(B机器)用于批量向DotAsterisk机器发起呼叫请求,最后一台是我的笔记本(C机器)用于发起结束呼叫控制、监听呼叫和查看日志等。下面列出上面3台机器的配置以供参考。

A机器: 公司淘宝咸鱼淘的一台机器,CPU是志强 Xeon E3 4核心8线程,其实也是一款老cpu了,服务器拆机后的淘汰款cpu; 内存是 4G x 2 的 1333频率的8G内存;硬盘是公司的一款拆机老硬盘,512G的一代SATA接口硬盘。哎,没办法,公司资源就这么多,不可能自己掏几万块钱去买台Dell R740的牛逼机器专门做测试。此台机器用来运行 DotAsterisk 2.2,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第1张图片

B机器: core i3 双核4线程的普通电脑,也是一款老机器,不过 采用了两条内存:8G+4G = 12G内存。此电脑运行winsip压力测试软件,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第2张图片

C机器: 我工作用的dell笔记本电脑,配置高低无所谓,因为只是把它用于ssh登录到A机器,远程桌面到B机器进去监控和配置,另外在本机运行注册一个 5060 分机到A机器 DotAsterisk ,用来测试高并发下通话音质是否正常,用来监听winsip并发呼叫的通话录音。所以整个测试对C机器的要求无所谓。

【说明】上面是我测试环境的3台机器硬件配置,此处有几处""本人踩过,所以要说明一下:

1) 安装点星pbx的时候,发现A机器居然没光驱,无奈之余只能先用U盘安装 centos6.5系统,然后再升级安装点星系统,也是够折腾的。

2)winsip这个软件,网上有一个2.4.7版本的破解版本。这个版本是一个很早的破解版本,只能安装到win XP机器上,没错,确实是win xp,在win10和win7是运行不了的。所以我将B机器从原来的win10重新更换为win XP系统,悲剧的是 原来的12G内存,在xp上面可以识别的不到4G。

 

二、软件安装和下载地址

1. A机器服务器安装的是最新的 DotAsterisk(点星PBX) 2.2 U6 系统,下载地址如下:

http://www.dotasterisk.cn/thread-2209-1-1.html

官网下载: http://www.enjoycti.com/download.html

百度云下载DotAsterisk-2.2-6-RELEASE-x86_64-DVD.iso  ,   提取码: p3cr

建议下载iso文件,刻盘后用光驱安装,安装步骤请参考如下官方安装文档。

《点星PBX企业呼叫中心——(一:安装)》

2. B机器安装winXP系统,下载地址请百度"雨林木风xp"、"番茄花园xp"、"萝卜家园xp",也可以在如下地址找到xp的下载地址:

《msdn我告诉你》

B机器安装破解版的winsip-2.4.7, 软件下载地址如下:

http://www.uzzf.com/soft/228979.html

3. C机器是我的dell笔记本,安装的软电话有 yate 和 eyebeam等软电话,其它软电话入microSIP也是可以的。软电话下载地址请自行百度或者到如下地址下载:

 http://www.enjoycti.com/download.html

4. 安装设置完成后,各个机器的IP地址如下:

A服务器(点星PBX): 192.168.88.22

B机器(winxp, winSIP): 192.168.88.222

C机器(笔记本,软电话eyebeam、yate等):  192.168.88.58

 

三、准备工作

1. A服务器安装的点星pbx,首选批量添加3000个坐席分机。

登录系统,在【用户组织管理】——【员工和分机】菜单,点击工具栏"批量添加",如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第3张图片

分机添加成功并应用配置后,可以在【PBX呼叫设置】——【坐席管理】——【坐席状态监控】中查看分机状态,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第4张图片

在后台【仪表盘】可以看到总用户分机数,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第5张图片

 

2. 点星pbx配置语音通知中继呼出呼入路由,以便winsip发起的呼叫转到点星pbx的语音通知进行自动应答处理。

由于winsip的并发呼叫的分机是先注册鉴权到点星PBX,winsip开启并发呼叫相当于普通注册到点星PBX的sip分机进行呼出呼叫,我们需要有一个自动应答呼叫请求并且播放语音流的 pbx系统(SIP终端)。这里我们还是选择本台点星pbx系统(A服务器)作为被叫,这里的处理有点技巧性。所以我们的思路是,在点星pbx上面添加一条loopback环路中继,让点星pbx的呼出路由经过这条中继"送出",然后中继"呼入"到自己,最后由点星pbx的呼出路由到"语音通知"进行应答和媒体处理。

此项设置需要分多个步骤完成,如下。

2.1 设置点星PBX的"语音通知"

在后台的【PBX呼叫设置】——【语音和彩铃】——【语音文件管理】中上传一段事项准备好的3分多钟时长的语音文件,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第6张图片

然后在【PBX呼叫设置】——【语音和彩铃】——【语音通知】中新增一段语音通知,"通知目的地"选择"结束呼叫",如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第7张图片

2.2 在点星PBX中添加一条对接到自己的"SIP对接中继",也就是上面说的的"loopback环路中继",如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第8张图片

说明: 所谓"环路中继" 也就是 自己呼叫到自己的中继,也就是 "SIP对接中继" 的下面配置中的 host指定为"127.0.0.1"即可,"中继个性配置如下":

host=127.0.0.1
port=5060
type=peer
context=from-pstn
dtmfmode=rfc2833
此处还要注意,请务必固定中继CID为一个非点星系统内部分机号的其它号码,否则winsip呼叫无法通过本中继呼入进来,具体与asterisk的呼叫鉴权有关系。上面的例子我们固定为"0278396968"。

2.3 在点星PBX中添加一条呼出路由,让winsip发起的did呼叫匹配本条路由"呼出"。

在后台【PBX呼叫设置】——【路由】——【呼出路由】中添加一条路由,选择上面添加的"环路中继"进行呼出,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第9张图片

说明: 此处的"号码变换和匹配模式"的匹配主体,此处我们填写"2X.",表示winsip的did呼叫的所有以"2"开头的号码,都匹配本条路由。后面的winsip创建呼叫文件的时候,我们会设置呼叫号码都是以"2"开头,详见下文。

2.4 在点星PBX中添加一条呼入路由,让所有通过"环路中继"的“外部呼入”通话都路由到 "语音通知"。

在后台【PBX呼叫设置】——【路由】——【呼入路由】中添加一条路由,目的地选择上面的3分钟时长的"语音通知",如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第10张图片

 

至此点星pbx配置完成,应用配置生效。可以结合仪表盘和Linux的shell终端,看看当前点星pbx的负载,可以发现在没有发起呼叫请求的情况下,点星pbx负载非常低,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第11张图片

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第12张图片

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第13张图片

 

3. 在B机器(xp)上设置winsip,并新建呼叫文件。

3.1 winsip全局设置

首先要说明的是网上流行的WinSIP 2.4.7这个破解版本只能在winXP系统中安装,如果想在win7和win10下面做测试,建议用xp虚拟机环境。

启动winsip软件,点击【Options】——【Settings】菜单,进入全局设置页面,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第14张图片

winsip全局配置非常精细,对SIP协议的各个参数粒度的设置基本都有,本人也是研究了半天文档教程后才略微懂一点点。由于本教程不是一篇介绍winsip的使用教程,所以只对需要的设置参数做一下罗列,winsip具体使用教程请自行百度。下面说明压力测试需要配置winsip的一些地方。

1. 打开WinSIP全局设置,选择【Media】选项卡

,勾选"General" 处的 "RTP Enabled" ,取消 "Send Only" ,这样设置的目的是让winsip的UAC发送和接受rtp媒体流,完全模拟真实voip语音通话的场景。另外在"Audio Capabilities"处,选择 “G.711 ALaw/Ulaw” 以及 "G.729" 3种语音编码格式,因为后续可能要针对这3种语音编码做压力测试,其次在"Outbound Audio Format"处,选择 G.711 Alaw编码格式情况下,winsip 发送语音媒体对于的 g711 alaw的Audio音频文件。上述设置已经如下图红色标记。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第15张图片

2. 切换到【Proxy/Registrar】选项卡,此处就是设置我们需要测试的SIP服务器(点星PBX),也就是winsip模拟的sip UAC的sip代理服务器地址。很简单,我们只需要填写点星pbx的sip地址和端口即可,参考下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第16张图片

点星pbx默认的sip地址和端口是:  192.168.88.22:5060 。

全局设置完成,其余的设置全部保持默认即可。

 

3.2 新建1000并发的call file文件。

在winsip界面,点击【File】——【New】菜单,打开新增一个call file 文件的参数配置界面,如下图。

在【General】选项卡,进行如下设置:

Filename: 给即将新建的call file文件命名。

Call: 1000 并发

Call Duration: 设置每次invite通话后的呼叫时长,比如我设置为介于区间1分钟到6分钟的随机时长。

Frequency: 设置呼叫频率,由于我们要测试1000并发呼叫的系统稳定性,所以选择 Repeating(重复呼叫),也就是一个通话结束后,winsip会再次发起呼叫,这样系统就会一直保持在较高呼叫并发。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第17张图片

在【Local】选项卡设置winsip批量注册到点星PBX的分机号,winsip支持分机号按步长1递增。由于之前我们在点星pbx后台批量添加分机的范围是 1000-4000,共3000个分机。此处我们选择从从1006分机开始,1000-1005分机用于并发测试的时候做电话监听和拨打听语音状态的测试。设置如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第18张图片

在【Authentication】选项卡,设置分机注册到点星pbx的用户名(Username)和密码(Password)。用户名和之前一样,就是分机号,从1006开始,递增步长为1。需要注意的是 Password 需要用Fixed(固定),因为点星PBX中我们批量添加分机的时候选择的是所有分机采用固定的密码—— money520。设置界面如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第19张图片

最后在【Remote】选项卡需要设置winsip的SIP UAC 呼叫的did号码,我们采用默认的 20000开头的号码,每个分机呼叫的号码采用递增方式,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第20张图片

需要注意的是: 此处设置拨打的did号码(ID/Number) 必须和上面点星PBX设置的"呼出路由规则"进行匹配,由于我们之前在点星pbx的"呼出路由"设置了一条匹配"2X."的呼出路由,所以此处winsip发起的呼叫,可以通过匹配此路由规则被到中继然后再转到"语音通知"。如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第21张图片

设置完毕,点击按钮,winsip会生成1000个分机的 call file文件,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第22张图片

 

四、发起呼叫并监控

1. 测试并发注册 

选择winsip工具栏的测试模式"Mode"下拉框,选择 "Registration Test", 点击右边的黑色图标,发起测试,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第23张图片

由于1000坐席注册对点星pbx几乎没有太大影响,基本5秒不到就都注册完成,下面图可以看到结果。

注册并发2000/s ,点星pbx全部处理成功,0条失败处理,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第24张图片

在点星pbx后台的【坐席状态监控】页面,可以看到1006-2005这1000个分机已经全部注册成功,如下图:

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第25张图片

linux的shell终端也可以看到注册消息,点星pbx的【仪表盘】可以看到注册的1000个分机,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第26张图片

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第27张图片

结束注册测试,点击Mode左侧的停止按钮,并进入call file 编辑模式,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第28张图片

2. 发起不带媒体流和录音的呼叫

在winsip的编辑视图中,选择【Options】——【Settings】菜单,选择【Media】选项卡,去掉"RTP Enabled"标签,进行不带rtp媒体流的语音呼叫测试。设置完成后,在工具栏把呼叫模式调整为"Initiate Calls" ,点击右侧的"黑色执行按钮",开始并发呼叫。如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第29张图片

可以看到winsip系统已经开始慢慢的发起呼叫了,点星的呼叫并发已经上升了,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第30张图片

从上面截图可以看到0个呼叫失败,当前呼叫并发是 2000(虽然算上参与测试的分机只有1000,但是我们做的是环路中继,算上呼出和呼入,那么就是1000 x 2 路并发,事实上确实是2000并发)。

呼叫运行稳定后,通过linux终端发现点cpu负载比较高,但是还有空闲,另外主要是asterisk占用了几乎绝大部分cpu负载,主要是用于处理呼叫信令。如下图:

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第31张图片

此时我们用 1002分机,拨打外线 20000,收听语音通知 发现音质清晰正常。然后注册admin账号分机5060,在点星pbx后台的【坐席状态监控页面】选择一个分机,点击工具栏的"监听通话"按钮,监听winsip和点星pbx的语音,发现音质正常,没有任何卡顿。如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第32张图片

系统运行一段时间后,依旧文档,而且winsip上显示呼叫失败率为0,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第33张图片

结论:在没有媒体语音处理的情况下,点星pbx可处理1000以上并发并没有太大压力。从测试机的配置可以看出,点星pbx并不需要很高的硬件配置。点星pbx底层是基于开源的asterisk软件,所以网上流传的asterisk并发并不高的结论,其实也不是很真实,至少我测试(写次文章前,我已经实现稳定运行半天)无法得出这样的结论,我测试呼叫了几十万的并发,winsip显示0呼叫失败。

测试了20分钟,在达到10000次呼叫后,结束呼叫,可以看到已经生成了很多通话记录,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第34张图片

3. 发起带媒体流和录音的呼叫

在winsip的编辑视图中,选择【Options】——【Settings】菜单,选择【Media】选项卡,勾选"RTP Enabled"标签。

本次呼叫测试是带有媒体流,而且点星pbx中也开启了录音处理。在这个机器配置下,发现当前呼叫并发超过了500后,明显后续呼叫失败率开始成倍增加。下面是当前winsip的并发通话在 567路时,我用1002分机拨打了一通外线,发现语音基本清晰。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第35张图片

而且我们看到此时的sip 服务器 已经出现了不少 503错误,估计是服务器处理不来这么多带语音媒体流的并发。如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第36张图片

cpu负载也一直保持在较高水平,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第37张图片

可喜的是,硬盘负载并不是很高,写速度还不到1MB/s ,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第38张图片

我后来仔细分析了一下,发现高并发带媒体流下,出现一些呼叫失败,客观上asterisk的带媒体并发处理确实有瓶颈,另外还有运行winsip的机器是一个100Mbps的网卡,机器性能不好,另外winsip软件本身处理带媒体并发呼叫的能力感觉也有限,还有就是点星pbx的测试机器配置也不高。综合各方面的原因,如果用硬件配置更好的机器,多个winsip进程在局域网多台机器上进行并发呼叫,优化一些asterisk的录音,可以肯定的是能够测出更好的数据。

不过就本台服务器配置,基于asterisk软交换的点星pbx能够跑出550并发通话(带录音媒体处理)和大于1000并发的呼叫(带语音媒体),已经是相当不错了。最后看一下当前呼叫情况,如下图。

使用winSIP对DotAsterisk(点星PBX)进行1000并发呼叫压力测试_第39张图片

 

你可能感兴趣的:(点星PBX,呼叫中心,Asterisk,Asterisk,winsip,点星pbx,并发压力测试,点星pbx呼叫中心)