Linux下SIPp测试Freeswitch

知识必备:Linux操作系统、Sip协议

一、安装

1.依赖包安装:

yum -y install gcc-c++
yum -y install ncurses-devel
yum -y install openssl-devel
# 为了安装libpcap,还需要安装以下两个开发包:
yum -y install flex
yum -y install bison

2、安装libcap

下载libcap :http://www.tcpdump.org/release/

wget http://www.tcpdump.org/release/libpcap-1.9.1.tar.gz
tar zxvf libcapXXX.gzlogin as root , go to folder libpcapXXX and install it. run:
./configure
make && make install

3.安装libnet (可跳过)

下载libnet :


tar zxvf libnetXXX.gz
# 切换root , 去libpnetXXX目录:
./configure
. /make
./make install

4、安装sipp

cd /home/dev
wget https://github.com/SIPp/sipp/releases/download/v3.6.0/sipp-3.6.0.tar.gz

安装方法:
支持PCAP 声音文件播放,而且支持密码验证支持:(支持407 auth验证支持)

# tar -zxvf sipp-xxx.tar
# cd sipp-xxx
#编译配置:
./configure --with-pcap --with-openssl
#编译&&安装:
make && make install
#确认是否安装成功:
sipp -v

第一行出现: SIPp v3.6.0-TLS-PCAP-RTPSTREAM 则安装成功

5、修改系统openfile限制

# 打开/etc/security/limits.conf 文件并添加如下内容:
* soft nofile 32768
* hard nofile 65535# 打开/etc/pam.d/login 文件并添加如下内容:
session required /lib/security/pam_limits.so#永久更改文件描述符所能支持的最大值:
ulimit -s unlimited
ulimit -a

6、freeswith配置修改

①、修改max-sessions和sessions-per-second

cd /etc/freeswitch/autoload_configs
vim switch.conf.xml
# 修改
<param name="max-sessions" value="100000"/>
<param name="sessions-per-second" value="10000"/>

②、修改拨号的正则

1、cd /etc/freeswitch/dialplan
2、vim public.xml
改为:
<extension name="Balance_load"><condition field="destination_number" expression="^([2-6][0-9][0-9][0-9])$"><action application="export" data="dialed_extension=$1"/><action application="set" data="sip_h_History-Info=${sip_history_info}"/><action application="set" data="hangup_after_bridge=true"/><action application="bridge" data="user/${dialed_extension}@${domain_name}"/></condition></extension>3、vim default.xml
改为:<extension name="public_extensions"><condition field="destination_number" expression="^([2-6][0-9][0-9][0-9])$"><action application="transfer" data="$1 XML default"/></condition></extension>

③、添加defalut配置文件

cd /etc/freeswitch/directory/default
# 3000 5999为自己需要的用户
for i in `seq 2000 5999`; do sed -e "s/1000/$i/g" 1000.xml > $i.xml ; done

④、添加白名单无需鉴权

cd /etc/freeswitch/autoload_configs
vim acl.conf.xml# 进入编辑模式修改<list name="domains" default="deny"><!-- domain= is special it scans the domain from the directory to build the ACL --><node type="allow" domain="$${domain}"/><!-- use cidr= if you wish to allow ip ranges to this domains acl. --><node type="allow" cidr="192.168.200.0/24"/><!--新增此行. --><node type="allow" cidr="10.10.81.0/24"/>    </list>

二、SIPp常用参数

注册:

sipp -sf regclient_set_c_port.xml 10.3.18.174:5060 -i 10.3.18.172 -p 26000  -inf uac2000_aibus_4000.csv -r 500  -rp 1000 -l 500 -m 4000

呼叫:

sipp -sf caller_with_auth_aibus.xml 10.3.18.174:5060 -i 10.3.18.172 -p 26000 -inf uac2000_aibus_4000.csv -r 80  -rp 1000 -l 80 -m 1000 -d 30000 -oocsn ooc_default  -aa  -trace_msg -trace_err  -trace_screen

参数解释:

-i: 本地ip,为'Contact:','Via:', 和 'From:' 头部信息设置本地IP,在脚本中用[local_ip]引入
-p:设置本地端口号,默认是由系统随机选择空闲的端口号;
-sf:引入脚本文件,根据需要模拟的呼叫流程编写
-inf:在通话场景中使用外部csv文件引入数据;文件的第一行说明了后面数据的读入方式,常用的有:顺序        (SEQUENTIAL), 随机 (RANDOM), 或用户(USER)顺序;第一行对应一个通话,它们由一个或多个’;’分隔数据字段,这些字段可以在xml场景文件中使用[field0], [field1], ...来调用;多个csv文件,可以同时使用(语法:-inf f1.csv -inf f2.csv ...)
xx:xx:xx:xx:5060:Freeswitch服务端IP及freeswitch使用的端口;
-r:并发数量
-rp:并发的时间,单位ms,例如:-r 800 -rp 1000,就是每秒800并发
-l:设置同时呼叫的最大数目;一旦达到此值,流量将被限制直到打的通话数下降;默认值3*call_duration(s)*rate
-m:通话总数,当设置的通话数完成时,停止测试并退出;
-d:自定义的通话时长,单位ms
-aa:针对INFO, UPDATE 和 NOTIFY消息,进行200 OK自动回复应答;
-oocsn:Load out-of-call scenario
-trace_msg:在<场景文件名>_<pid>_messages.log中显示发送和接收的SIP消息;调试时可增加,正试性能测试时,可取消,以免日志量太大影响本地性能;
-trace_screen:在退出SIPp时,把屏蔽上的统计信息写入<场景名>_<pid>_screens.log文件中;在后台模式(-bq选项)时,这对于得到最终状态报告很有用;
-trace_err:跟踪所有非期望的消息到<场景文件名>_<pid>_errors.log;

三、注册场景测试

测试前:准备uac.csv、uas.csv 和 regclient_set_c_port.xml

1、uac.csv

SEQUENTIAL
2000;2050;[authentication username=2000 password=1234]
2001;2051;[authentication username=2001 password=1234]
2002;2052;[authentication username=2002 password=1234]
2003;2053;[authentication username=2003 password=1234]
2004;2054;[authentication username=2004 password=1234]
...

注意:

1、csv格式创建后用Notepad++打开,否则改编编码导致失败
2、第一行代表执行顺序:包括SEQUENTIAL和RANDOM
3、[filed0]代表第1列,[filed1]代表第2列

2、uas.csv

SEQUENTIAL
2050;;[authentication username=2050 password=1234]
2051;;[authentication username=2051 password=1234]
2052;;[authentication username=2052 password=1234]
2053;;[authentication username=2053 password=1234]
2054;;[authentication username=2054 password=1234]
...

3、regclient_set_c_port.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE scenario SYSTEM "sipp.dtd">
<scenario name="regclient"><Global variables="c_port" /><nop hide="true"><action><assignstr assign_to="EXP" value="3600" /></action></nop><send><![CDATA[REGISTER sip:[remote_ip] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: <sip:[field0]@[remote_ip]>;tag=acknnkkg.[call_number]To: <sip:[field0]@[remote_ip]>Call-ID: [call_id]CSeq: 1 REGISTERContact: <sip:[field0]@[local_ip]:[$c_port]>Max-Forwards: 70Subject: Reg Performance Testuser-agent: SIPp clientExpires: [$EXP]Content-Length: 0]]></send><recv response="401" optional="true" auth="true" next="auth" ></recv><recv response="403" optional="true" next="END"></recv><recv response="404" optional="true" next="END"></recv><recv response="200" next="END" timeout="5000"></recv><label id="auth" /><send retrans="500"><![CDATA[REGISTER sip:[field0]@[remote_ip]:[remote_port] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: [field0] <sip:[field0]@[remote_ip]:[remote_port]>;tag=[call_number]To: [field0] <sip:[field0]@[remote_ip]:[remote_port]>Call-ID: [call_id]CSeq: 2 REGISTERContact: sip:[field0]@[local_ip]:[local_port]Max-Forwards: 70Subject: Reg Performance Test user-agent: SIPp clientExpires: [$EXP][field2]Content-Length: 0]]></send><recv response="200" next="END" timeout="5000"></recv><label id="END"/><nop hide="true"></nop><!--<Reference variables="microseconds,seconds" />--><!-- Definition of the response time repartition table (unit is ms)   --><ResponseTimeRepartition value="50, 200"/><!-- Definition of the call length repartition table (unit is ms)     --><CallLengthRepartition value="500, 5000"/></scenario>

主叫注册

sipp -sf regclient_set_c_port.xml 192.168.200.101:5060 -i 192.168.200.101 -p 26045  -inf uac500.csv -r 30  -rp 1000 -l 100 -m 500

被叫注册

sipp -sf regclient_set_c_port.xml 192.168.200.101:5060 -i 192.168.200.101 -p 26048 -inf uas500.csv  -r 30  -rp 1000 -l 100 -m 500

四、电话场景测试

测试前:准备被叫执行脚本callee_with_bye.xml和主叫呼叫脚本caller_with_auth.xml

1、callee_with_bye.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE scenario SYSTEM "sipp.dtd"><scenario name="callee_with_bye">
<!--用于模拟局内被叫侧用户的正常业务流程媒体类型:PCMU呼叫挂机:主叫方(60秒超时后主动发BYE拆话)--><!--执行命令样例:sipp -sf callee_with_bye.xml -p 5068--><!--定义全局状态机,如果收到OPTIONS消息,则跳转至options标签处-->
<recv request="OPTIONS" optional="global" next="options">
</recv><recv request="INVITE">
<!--参数caller_num、callee_num和caller_tag用于主叫未挂机,BYE接收超时主动发BYE的流程--><action><ereg regexp="sip:(.*)@(.*)>;tag=(.*)"search_in="hdr"header="From: "check_it="true"assign_to="junk,caller_num,domain,caller_tag" ></ereg>    <ereg regexp="sip:(.*)@.*>"search_in="hdr"header="To: "check_it="true"assign_to="junk,callee_num" ></ereg>      </action>
</recv><!--增加间隔20ms,避免偶现系统不发送100响应的问题-->
<pause hide="true" milliseconds="20"/>  <send><![CDATA[SIP/2.0 100 Trying[last_Via:][last_From:][last_To:][last_Call-ID:][last_CSeq:]Contact: <sip:[local_ip]:[local_port];transport=[transport]>Content-Length: 0]]></send><!--增加间隔20ms,避免偶现系统不发送180响应的问题-->
<pause hide="true" milliseconds="20"/> <send><![CDATA[SIP/2.0 180 Ringing[last_Via:][last_From:][last_To:];tag=[call_number][last_Call-ID:][last_CSeq:]Contact: <sip:[local_ip]:[local_port];transport=[transport]>Content-Length: 0]]>
</send><!--设置发送200后等待ACK的重传周期为1秒,如果1秒内收不到ACK则进行200的重传-->
<send retrans="1000" start_rtd="ack"><![CDATA[SIP/2.0 200 OK [last_Via:][last_From:][last_To:];tag=[call_number][last_Call-ID:][last_CSeq:]Contact:<sip:[local_ip]:[local_port];transport=[transport]>Content-Type: application/sdpContent-Length: [len]v=0o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]s=-c=IN IP[media_ip_type] [media_ip]t=0 0m=audio [media_port] RTP/AVP 0 8a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=ptime:20]]>
</send><!--设置等待ACK的超时定时器为30秒,如果30秒内收不到ACK则呼叫超时失败而结束-->
<recv request="ACK" rtd="ack" timeout="30000" /><!--使用rtp_stream循环播放PCMA音频
<nop hide="true"><action><exec rtp_stream="pcap/g711a.pcap,-1,0"/></action>
</nop>
-->
<!--使用rtp_stream循环播放PCMU音频
<nop hide="true"><action><exec rtp_stream="pcap/g711u.pcap,-1,0"/></action>
</nop>
--><!--使用play_pcap单次播放PCMA音频-->
<nop hide="true"><action><exec play_pcap_audio="pcap/g711a.pcap"/> </action>
</nop>
<!--使用play_pcap单次播放PCMU音频
<nop hide="true"><action><exec play_pcap_audio="pcap/g711u.pcap"/> </action>
</nop>
--><recv request="BYE" timeout="60000" ontimeout="send_bye"/>
<send next="END"><![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]]>
</send><label id="options"/><send next="END" ><![CDATA[SIP/2.0 200 OK[last_Via:][last_Call-ID:][last_From:][last_To:];tag=telpo-options[call_number][last_CSeq:][last_Contact:]user-agent: SIPP version [sipp_version]subject: reg performancelink-status: I am aliveContent-Length: 0]]>
</send> <!--主叫未挂机,BYE接收超时,被叫主动发BYE-->
<label id="send_bye"/>
<send start_rtd="bye"><![CDATA[BYE sip:[$caller_num]@[local_ip]:[local_port] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: "[$caller_num]" <sip:[$caller_num]@[local_ip]>;tag=[call_number]To: "[$callee_num]"<sip:[$callee_num]@[local_ip]>;tag=[$caller_tag]Call-ID: [call_id]CSeq: 2 BYEMax-Forwards: 70Subject: normal call scenario Content-Length: 0]]>
</send><recv response="200" rtd="bye">
</recv> <label id="END"/><Reference variables="junk,domain" /><!-- definition of the response time repartition table (unit is ms)-->
<ResponseTimeRepartition value="50, 200"/><!-- definition of the call length repartition table (unit is ms)-->
<CallLengthRepartition value="500, 1000, 10000"/></scenario>

2、caller_with_auth.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE scenario SYSTEM "sipp.dtd"><scenario name="caller_with_auth">
<!--执行命令样例:sipp -sf caller_with_auth.xml xx.x.x.xx:5060 -p 5066 -inf caller.csv -m 1 -d 10000 -oocsn ooc_default-->
<!--发送INVITE消息,设定重传定时器为1000ms,同时启动定时器invite-->
<send retrans="1000" start_rtd="invite"><![CDATA[INVITE sip:[field1]@[remote_ip] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: "[field0]" <sip:[field0]@[remote_ip]>;tag=[call_number]zhg8To: "[field1]"<sip:[field1]@[remote_ip]>Call-ID: [call_id]CSeq: 1 INVITEContact: <sip:[field0]@[local_ip]:[local_port]>User-Agent: SIPp client mode version [sipp_version]Allow: INVITE,PRACK,ACK,UPDATE,CANCEL,BYE,OPTIONS,INFO,SUBSCRIBE,REFER,NOTIFYMax-Forwards: 70Content-Type: application/sdpContent-Length: [len]v=0o=SIPp [pid][call_number] 8[pid][call_number]8 IN IP[local_ip_type] [local_ip]s=SIPp Normal Call Testt=0 0m=audio [media_port] RTP/AVP 0 8c=IN IP[media_ip_type] [media_ip]a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=ptime:20a=sendrecv]]></send><recv response="100" optional="true">
</recv><!-- <recv response="401" auth="true"> -->
<!-- </recv> --><!-- 部分呼叫鉴权可能为407 -->
<!-- <recv response="407" option="true" auth="true">
</recv><send><![CDATA[ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch-3]From: "[field0]" <sip:[field0]@[remote_ip]>;tag=[call_number]zhg8To: "[field1]"<sip:[field1]@[remote_ip]>[peer_tag_param]Call-ID: [call_id]CSeq: 1 ACKContact: <sip:[field0]@[local_ip]:[local_port]>Max-Forwards: 70Subject: normal call scenario user-agent: SIPp client mode version [sipp_version]Content-Length: 0]]></send><send retrans="1000" start_rtd="invite"><![CDATA[INVITE sip:[field1]@[remote_ip] SIP/2.0[last_Via:]From: "[field0]" <sip:[field0]@[remote_ip]>;tag=[call_number]zhg8To: "[field1]"<sip:[field1]@[remote_ip]>Call-ID: [call_id]CSeq: 2 INVITE[field2]Contact: <sip:[field0]@[local_ip]:[local_port]>User-Agent: SIPp client mode version [sipp_version]Allow: INVITE,PRACK,ACK,UPDATE,CANCEL,BYE,OPTIONS,INFO,SUBSCRIBE,REFER,NOTIFYMax-Forwards: 70Content-Type: application/sdpContent-Length: [len]v=0o=SIPp [pid][call_number] 8[pid][call_number]8 IN IP[local_ip_type] [local_ip]s=SIPp Normal Call Testt=0 0m=audio [media_port] RTP/AVP 0 8c=IN IP[media_ip_type] [media_ip]a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=ptime:20a=sendrecv]]>
</send><!--1xx响应均为可选接收消息,且接收到临时响应后,即可停止invite定时器的计时-->
<!--收到4xx/5xx错误响应后,直接进入呼叫失败-->
<!-- <recv response="100" optional="true" rtd="invite">
</recv><recv response="183" optional="true" rtd="invite" next="normal">
</recv><recv response="403" optional="true" rtd="invite" next="err_ack">
</recv><recv response="407" optional="true" rtd="invite" next="err_ack">
</recv><recv response="415" optional="true" rtd="invite" next="err_ack">
</recv><recv response="480" optional="true" rtd="invite" next="err_ack">
</recv><recv response="486" optional="true" rtd="invite" next="err_ack">
</recv><recv response="500" optional="true" rtd="invite" next="err_ack">
</recv><recv response="503" optional="true" rtd="invite" next="err_ack">
</recv> -->-->
<recv response="180"  optional="true" rtd="invite" next="normal">
</recv><label id="normal"/>
<recv response="200" rtd="invite"><action><ereg regexp="m=audio ([0-9]*)"search_in="msg"check_it="true"assign_to="junk,callee_media_port" /></action>
</recv><nop hide="true"></nop><send><![CDATA[ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: "[field0]" <sip:[field0]@[remote_ip]>;tag=[call_number]zhg8To: "[field1]"<sip:[field1]@[remote_ip]>[peer_tag_param]Call-ID: [call_id]CSeq: 2 ACKContact: <sip:[field0]@[local_ip]:[local_port]>Max-Forwards: 70Subject: normal call scenariouser-agent: SIPp client mode version [sipp_version]Content-Length: 0]]>
</send><!--使用rtp_stream循环播放PCMA音频
<nop hide="true"><action><exec rtp_stream="pcap/g711a.pcap,-1,0"/></action>
</nop>
-->
<!--使用rtp_stream循环播放PCMU音频
<nop hide="true"><action><exec rtp_stream="pcap/g711u.pcap,-1,0"/></action>
</nop>
--><!--使用play_pcap单次播放PCMA音频-->
<nop hide="true"><action><exec play_pcap_audio="pcap/g711a.pcap"/> </action>
</nop>
<!--使用play_pcap单次播放PCMU音频
<nop hide="true"><action><exec play_pcap_audio="pcap/g711u.pcap"/> </action>
</nop>
--><!--媒体流传输完毕后,暂停发送BYE结束呼叫,在执行命令中增加参数-d 指定暂停时间:如-d 10000暂停10秒-->
<pause /><send start_rtd="bye"><![CDATA[BYE sip:[field1]@[remote_ip]:[remote_port] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: "[field0]" <sip:[field0]@[remote_ip]>;tag=[call_number]zhg8To: "[field1]"<sip:[field1]@[remote_ip]>[peer_tag_param]Call-ID: [call_id]CSeq: 3 BYEMax-Forwards: 70Subject: normal call scenarioContent-Length: 0]]>
</send><recv response="200" rtd="bye" next="END">
</recv><!--异常结束,复用err_ack流程-->
<label id="err_ack"/><send><![CDATA[ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0[last_Via:]From: "[field0]" <sip:[field0]@[remote_ip]>;tag=[call_number]zhg8To: "[field1]"<sip:[field1]@[remote_ip]>[peer_tag_param][last_Call-ID:]CSeq: 2 ACKMax-Forwards: 70Subject: normal call scenariouser-agent: SIPp client mode version [sipp_version]Content-Length: 0]]>
</send><!--正常结束-->
<label id="END"/>
<nop hide="true">
</nop><!--如果存在定义了但未被使用的变量,可以在下面语句的双引号中增加,避免运行时报错-->
<Reference variables="junk,callee_media_port" /><!--definition of the response time repartition table (unit is ms)   -->
<ResponseTimeRepartition value="50, 200,1000,2000,4000,10000"/><!--definition of the call length repartition table (unit is ms)     -->
<CallLengthRepartition value="500, 1000, 10000"/></scenario>

3、测试呼叫的步骤:

执行先后顺序:

# 1、启动主叫注册
sipp -sf regclient_set_c_port.xml 192.168.200.101:5060 -i 192.168.200.101 -p 26045  -inf uac500.csv -r 30  -rp 1000 -l 100 -m 500# 2、启动被叫注册
sipp -sf regclient_set_c_port.xml 192.168.200.101:5060 -i 192.168.200.101 -p 26048 -inf uas500.csv  -r 30  -rp 1000 -l 100 -m 500#3、等待被叫注册结束,启动被叫
sipp -sf callee_with_bye.xml -i 192.168.200.101 -p 26048 -trace_err # 4、等待被叫执行后,执行主叫
sipp -sf caller_with_auth.xml 192.168.200.101:5060 -i 192.168.200.101 -p 26045 -inf uac500.csv -r 500  -rp 1000 -l 5000 -m 5000 -d 60000 -oocsn ooc_default -trace_err

4、性能分析

并发数(CC) = 平均通话时长 * CPS

【SIPp】Linux-SIPp3.6.0 测试FreeSwitch相关推荐

  1. Linux烤机脚本测试io,sipp测试脚本用于媒体测试

    前言 sipp是一款用于测试SIP的命令行工具,普通情况下,我们主要用来测试的是SIP信令,而要测试媒体,其提供对PCAP抓包的读取以及发送功能支持,但是在多次实验的情况下,其每次也只能单独发送音频流 ...

  2. 卡巴斯基文件服务器,卡巴斯基测试反病毒Linux文件服务器6.0

    [IT168 资讯]国际领先的信息安全解决方案提供商--卡巴斯基实验室发布了应用于Linux文件服务器的卡巴斯基反病毒Linux文件服务器6.0 beta版. 在感染异构网络上的其他组件之前,恶意程序 ...

  3. Linux 双网卡绑定测试

    Linux 双网卡绑定测试 先介绍一下情况,服务器A和服务器B都是CentOS 4.6的系统,现在要做HA Cluster,为了避免裂脑的发生,要提高心跳链路的可靠性,下图是现时的连接情况,服务器A的 ...

  4. LTP--linux稳定性测试 linux性能测试 ltp压力测试

    说明:在写这篇文章之前,本人也不曾了解LTP是干嘛的,直到参加一次技术沙龙才了解到它是用来对linux系统进行稳定性测试的一个开源工具,演讲人是世纪佳缘运维部门的技术老总!平时我们这些做运维朋友们都很 ...

  5. 性能测试入门(六)windows及Linux下做压力测试的注册表设置

    windows及Linux下做压力测试的注册表设置 from: http://www.cnblogs.com/tianzhiliang/articles/2400176.html TcpTimedWa ...

  6. httperf ---linux web站点压力测试

    httperf ---linux web站点压力测试 一.工具下载&&安装  软件获取 ftp://ftp.hpl.hp.com/pub/httperf/  这里使用的是如下的版本  ...

  7. Linux安装php-7.0.16,完成php和apache的配置

    Linux安装php-7.0.16,完成php和apache的配置     版本:php-7.0.16.tar.gz,libxml2-2.9.2.tar.gz(php需要它的支持,首先安装它) 说明 ...

  8. @Zabbix6.2安装部署【 Red Hat Linux release 8.0】

    文章目录 1.版本支持官方确认 2.服务器环境 3.zabbix6.2部署 4.数据库选用 5.数据库安装及初始化 6.zabbix系统架构数据导入 7.zabbix server配置DB 8.Zab ...

  9. Oracle 10g For Windows 10.1.0和 Oracle 10g For Linux 10.1.0.3下载地址

    Oracle 10g For Windows 10.1.0[ISO] [已通过安全检测] 瑞星17.57.42 [安装测试]WinXP SP2 上安装 Oracle 数据库 10g 如果打开不了请 打 ...

  10. Stress命令Linux性能测试,压力测试工具(Centos演示)

    Stress命令Linux性能测试,压力测试工具 1.模拟一颗cpu打满 stress -c 2 (见如下图:使用htop或者top查看想打满几颗cpu就输入,对应数字即可) 2.模拟产生2个进程,每 ...

最新文章

  1. AutoML综述更新 【AutoML:Survey of the State-of-the-Art】
  2. 北京soul_打破虚拟迎接现实,“Soul”让网络社交楚楚不凡
  3. 实录 | 平安人寿资深算法工程师姚晓远:对话生成模型的探析与创新
  4. C语言 2048小游戏
  5. Mingw下g++编译执行顺序错误
  6. java 函数式编程 示例_功能Java示例 第8部分–更多纯函数
  7. 计数排序的应用----排序字符串
  8. Diango博客--12.开发 Django 博客文章阅读量统计功能
  9. 生成高斯热力图(craft中有使用)+2d heatmap+3d heatmap
  10. Python3基础3——List列表的增删改和内建函数的用法
  11. 21天学通C语言-学习笔记(8)
  12. MAC 下shell工具推荐 zentermlite
  13. 嵌入式开发(一):嵌入式开发新手入门
  14. 大数据在职研究生哪个好_在职研究生大数据专业怎么样?
  15. 传奇服务端如何添加地图
  16. JavaScript高级(二)|函数进阶+正则表达式
  17. pcb规则中英文对照
  18. 迷你播放器--第一阶段(6)--添加搜索定位功能(进阶)-使用filter过滤以及对汉语拼音的排序匹配
  19. 从字节码指令分析i=i++(i是long类型时)
  20. Tomcat8启动不了的问题

热门文章

  1. matlab中whos怎么用,【安富莱DSP教程】第3章 Matlab 简易使用(一)
  2. Pcshare驱动级木马及查杀
  3. 免费开源CMS建站系统排行榜
  4. (概率论习题册题解)第二章 随机变量及其分布
  5. 屏幕录像专家 共享版 V7.5 安装图解
  6. Ubuntu 解析迅雷链接
  7. WIFI 2.4G及5G信道划分表(附无线通信频率分配表)
  8. 网络安全等级保护2.0标准解析
  9. ORACLE 中通过证件号码获取性别
  10. 如何保证MQ消息队列的高可用