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