SIPP对Freeswitch进行压力测试

1.sipp安装依赖包:
libnet
nurses
libpcap
libpcap-devel
openssl

#sipp安装包
yum install libpcap-devel

2.执行命令
sipp 192.168.1.31 -i 192.168.1.30  -p 5050 -s 5600  -m 5200 -r 30 -max_socket 5600 -sf test.xml -inf auto_users.xml -trace_screen -trace_err -aa -rtp_echo
其中30是客户端,31是服务器
-p 是客户端端口
-m
-l 并发执行数量
-s 被叫号码

sipp -sd branchc >branchc.xml   //重新输出branchc.xml模板

3.csv文件准备  auto_users.cvs
#!/bin/bash
echo "SEQUENTIAL" >auto_users.xml
for ((i=1001,j=1002;i<6001,j<6002;i+=2,j+=2))
do
      echo "$i;$j;[authentication username='"$i"' password=12345]" >>auto_users.xml
done

for ((i=1002,j=1001;i<6002,j<6001;i+=2,j+=2))
do
      echo "$i;$j;[authentication username='"$i"' password=12345]" >>auto_users.xml
done

4.脚本文件配置
  场景是客户端向服务器发送注册及会话请求,服务器设置为默认自动接听,所有用户信息都在31上,所以所有的服务器地址与remote_ip(所有@后的ip地址)都是31
1)reg消息要from和to号码与地址一致
2)invite请求消息需要

3)注意每条消息的Cseq值,第一次登记是1,第二次是2,第一次请求会话是1,第二次是2,ack要与前一条请求消息对应,bye自成一条;
4)消息配置的脚本中[fieldx]值与auto_users一一对应
            [field0]:用户名
            [field1]:被叫号码
            [field2]:验证信息
5)ACK消息的Via、From、To可以使用[last_Via]。。。rport[last_From][last_To]代替尝试解决问题
6)与freeswitch联调问题时,可以wireshark抓包对比一次完整呼叫流程查看,trace_msg可以查看sipp发出的所有包
7)注意rtp文件的编码格式
8)5秒断开会话连接是服务器没有收到rtp包

5.问题遗留
 1)被叫端收不到对端invite请求;
 2)rtp_echo始终有效,而nop播放媒体流有时会失败;
 3)rtp_echo方式时,客户端发出的流量明显少于接收的流量;
 4)目前加鉴权验证两次reg后会回复403forbiden,之前曾经可用过,脚本未改动,现在不行了
 5)被叫号码必须固定

 6.测试过程中学习命令
 #挂载光盘
 1)mount -t auto /dev/sr0    /mnt/cdrom       //光盘默认是sr0,sr1...

 #卸载光驱
 2)umount /mnt/cdrom                  //注意mount时需要root用户,umount时需要离开光盘目录

 3)tcpdump -i eno3 src 192.168.198.145   //可以指定网口指定源、目的ip指定部分协议抓包(rtp协议没有)
 4)tcpreplay                          //指定速率回放数据文件,允许持续循环且能记录端口流量(iftop)
 5)/etc/sysconfig/network-scripts/配置网络IP
 6)systemctl stop firewalld
   systemctl disable firewalld         //centOS 7+ 防火墙关闭使用
 7)netstat -anp|grep sipp             //端口查看
 8)端口监听

在服务端开启udp端口监听:
nc -ulp 6000 &

在服务端开启tcp端口监听:
nc -l 25500

在客户端探测或发消息到udp端口
nc -vu xxx.xxx.xxx.xxx 25500

查看当前监听的udp端口
netstat -anu

查看当前监听sipp的tcp端口
netstat -ant|sipp

 9)输入值的脚本
#!/bin/bash
# Author:fairylly
# 执行脚本时,未输入参数,提示:please input call number!,并退出
if [[ $# -eq 0 ]]
then
        echo "please input call number!"
        exit 1
fi
 10)dstat安装

使用"绿色版"安装

  wget http://dstat.sourcearchive.com/downloads/0.7.0/dstat_0.7.0.orig.tar.gz
  tar -xvzf dstat_0.7.0.orig.tar.gz
  cd dstat-0.7.0.orig/
  #使用以下方式即可使用dstat
  ./dstat -V


使用rpm安装

  wget http://mirror.centos.org/centos/6/os/i386/Packages/dstat-0.7.0-2.el6.noarch.rpm
  rpm -ivh dstat-0.7.0-2.el6.noarch.rpm
  #直接在系统中调用dstat即可
  dstat -V

使用yum安装

 yum -y install dstat

#监控swap,process,sockets,filesystem并显示监控的时间
dstat -tsp --socket --fs


#当前最消耗IO的进程和最消耗块设备IO的进程
 dstat -t --top-io-adv --top-bio-adv
 #输出到.csv文件
 dstat -tsp --socket --fs --output /tmp/dstat.csv


dstat -cdlmnpsy

查看全部内存都有谁在占用:
# dstat -g -l -m -s --top-mem

显示一些关于CPU资源损耗的数据:
# dstat -c -y -l --proc-count --top-cpu


1221used:
dstat -t --top-io-adv --top-bio-adv -n
 
常用参数:
-c cpu,显示CPU系统占用,用户占用,空闲,等待,中断,软件中断等信息

-C 当有多个CPU时候,此参数可按需分别显示cpu状态

-d disk,显示磁盘读写数据大小

-n net 显示网络状态

-N net 有多块网卡时,指定要显示的网卡

-l load average 显示系统负载情况

-m memory 显示内存使用情况

-g page 显示页面使用情况

-p process 显示进程状态

-y system status

--ipc 显示ipc消息队列,信号等信息

--socket 用来显示tcp udp端口状态

-v vmstat 等同于 -pmgdsc -D total

--output 文件名 支持将状态信息以csv的格式重定向到指定的文件中

-r I/O请求情况

-s swap 显示交换分区使用情况

注: cpu:hiq,siq分别为硬中断和软中断次数。

2. system:int,csw分别为系统的中断次数(interrupt)和上下文切换(context switch)

 

 

6.监控
        top
        dstat
        vmstat
        losf
        iostat

lsof -n|awk '{print $2}'| sort |uniq -c| sort -nr|more|grep 5833


dstat -t --top-cpu --top-io-adv --top-bio-adv -n >dstat1226.csv

vmstat 10 >vmstat1226.csv

iostat 10 >iostat1226.csv

top|grep freeswitch >top1226.csv

7.在 Debian6 中 apt-get install sip-tester 所安装的 SIPp 无法回放 pcap 文件,需要自行编译安装,特此记录过程 :
    1)准备工作 apt-get install build-essential libpcap-dev libncurses5-dev
    2)获取 SIPp 源码并解压 wget http://sourceforge.net/projects/sipp/files/sipp/3.2/sipp.svn.tar.gz/download -O sipp.svn.tar.gz
    3)安装编译 cd sipp.svn make pcapplay cp sipp /usr/local/bin/
8.抓取过程协议:linphone,如果无法在电话开始后抓取rtp包,可以过滤rtp之后另存出来,要求.pcap包
9.各性能指标的连锁反应
vmstat中r表示运行队列(就是说有多少个进程真的到CPU),当这个值超过了cpu数量,就可能出现cpu瓶颈
swpd虚拟内存正在使用的虚拟内存大小,单位K

 


1)free急剧下降
buff和cache被回收下降,但没有好转,依旧需要使用大量swap交换分区swqd,vmstat中等待进程数b增多,读写IO,bi/bo增多
si/so大于0开始从硬盘中读取
cpu等待时间用于IO等待,wa增加内存不足
2)开始使用swpd,该值不为0
siso大于0开始从硬盘读取,IO瓶颈
3)读写IO,bibo增多超过2000
cpu等待时间用于IO等待,wa增加超过20
sy系统调用时间长,io操作频繁会导致增加>30%
wa io等待时间长:
                iowait%<20%    良好
                iowait%<35%    一般
                iowait%>50%    繁忙
4)进一步使用iostat观察
cpu瓶颈1:load,vmstat中r列
     反映为CPU队列长度
     一段时间内,CPU正在处理和等待cpu处理的进程数之和,直接反应了CPU的使用和申请情况
     理想的load average:核数*CPU数*0.7,超出这个值,说明已经到瓶颈了。
                                       CPU个数: grep 'physial id' /proc/cpuinfo |sort -u
                                       核数   : grep 'core id /proc/cpuinfo |sort -u |wc -l

cpu瓶颈2:
         us CPU时间高超过90%
                    涉及到web服务器,cs每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了要考虑调低线程或者进程的数目,例如在apache和nginxp这种web
                    服务器中,一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以将进程或者线程的峰值一直下调、压测,直到cs到一个较小的值,这个进程和线程数就是比较合适的值。
                    系统调用也是,每次调用系统函数,代码就会进入内核空间,导致上下文切换,这是很耗资源也要尽量避免频繁调用系统函数。上下文切换次数过多表示CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,没有充分利用,是不可取的。
         cs可以对apache和nginx线程和进程数限制起到一定参考作用;
较好的趋势:swap使用少,swpd数值低,siso分页读取写入数值趋近于0

 

你可能感兴趣的:(SIPP对Freeswitch进行压力测试)