【SIPp】Linux-SIPp3.6.0 测试FreeSwitch
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相关推荐
- Linux烤机脚本测试io,sipp测试脚本用于媒体测试
前言 sipp是一款用于测试SIP的命令行工具,普通情况下,我们主要用来测试的是SIP信令,而要测试媒体,其提供对PCAP抓包的读取以及发送功能支持,但是在多次实验的情况下,其每次也只能单独发送音频流 ...
- 卡巴斯基文件服务器,卡巴斯基测试反病毒Linux文件服务器6.0
[IT168 资讯]国际领先的信息安全解决方案提供商--卡巴斯基实验室发布了应用于Linux文件服务器的卡巴斯基反病毒Linux文件服务器6.0 beta版. 在感染异构网络上的其他组件之前,恶意程序 ...
- Linux 双网卡绑定测试
Linux 双网卡绑定测试 先介绍一下情况,服务器A和服务器B都是CentOS 4.6的系统,现在要做HA Cluster,为了避免裂脑的发生,要提高心跳链路的可靠性,下图是现时的连接情况,服务器A的 ...
- LTP--linux稳定性测试 linux性能测试 ltp压力测试
说明:在写这篇文章之前,本人也不曾了解LTP是干嘛的,直到参加一次技术沙龙才了解到它是用来对linux系统进行稳定性测试的一个开源工具,演讲人是世纪佳缘运维部门的技术老总!平时我们这些做运维朋友们都很 ...
- 性能测试入门(六)windows及Linux下做压力测试的注册表设置
windows及Linux下做压力测试的注册表设置 from: http://www.cnblogs.com/tianzhiliang/articles/2400176.html TcpTimedWa ...
- httperf ---linux web站点压力测试
httperf ---linux web站点压力测试 一.工具下载&&安装 软件获取 ftp://ftp.hpl.hp.com/pub/httperf/ 这里使用的是如下的版本 ...
- 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需要它的支持,首先安装它) 说明 ...
- @Zabbix6.2安装部署【 Red Hat Linux release 8.0】
文章目录 1.版本支持官方确认 2.服务器环境 3.zabbix6.2部署 4.数据库选用 5.数据库安装及初始化 6.zabbix系统架构数据导入 7.zabbix server配置DB 8.Zab ...
- 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 如果打开不了请 打 ...
- Stress命令Linux性能测试,压力测试工具(Centos演示)
Stress命令Linux性能测试,压力测试工具 1.模拟一颗cpu打满 stress -c 2 (见如下图:使用htop或者top查看想打满几颗cpu就输入,对应数字即可) 2.模拟产生2个进程,每 ...
最新文章
- AutoML综述更新 【AutoML:Survey of the State-of-the-Art】
- 北京soul_打破虚拟迎接现实,“Soul”让网络社交楚楚不凡
- 实录 | 平安人寿资深算法工程师姚晓远:对话生成模型的探析与创新
- C语言 2048小游戏
- Mingw下g++编译执行顺序错误
- java 函数式编程 示例_功能Java示例 第8部分–更多纯函数
- 计数排序的应用----排序字符串
- Diango博客--12.开发 Django 博客文章阅读量统计功能
- 生成高斯热力图(craft中有使用)+2d heatmap+3d heatmap
- Python3基础3——List列表的增删改和内建函数的用法
- 21天学通C语言-学习笔记(8)
- MAC 下shell工具推荐 zentermlite
- 嵌入式开发(一):嵌入式开发新手入门
- 大数据在职研究生哪个好_在职研究生大数据专业怎么样?
- 传奇服务端如何添加地图
- JavaScript高级(二)|函数进阶+正则表达式
- pcb规则中英文对照
- 迷你播放器--第一阶段(6)--添加搜索定位功能(进阶)-使用filter过滤以及对汉语拼音的排序匹配
- 从字节码指令分析i=i++(i是long类型时)
- Tomcat8启动不了的问题