[心得]Tsung壓測工具科普
Story
Tsung是erlang開發的一個開源的多協議分散式負載測試工具,它能用來壓力測試HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP 和 Jabber/XMPP的伺服器。它可以分佈在多個客戶機,並能夠模擬成千上萬的虛擬使用者數併發。
基於nodeJS,使用起來非常方便,作圖工具非常棒!
JS + jQuery + NodeJS,前端標配。
在使用node JS時,有一個express的外部元件。相當於nodeJS界的MVC。
作為使用過httperf,jmeter的人來說,覺得這個做圖簡直是so easy。
有過其他效能工具使用經驗的朋友注意:
1. Tsung的每一個虛擬使用者就是一個erlang的輕量程式。
2. 虛擬使用者完成session後就消失。
3. 大量的虛擬使用者(erlang輕量程式)建立在erlangVM上。
Tsung的安裝
CentOS下安裝:
Tsung安裝包、erlang安裝包、Perl ( 生成報告所需模組)、圖形庫gnuplot等
1.erlang
2.perl
3.gnuplot
yum install gd libpng zlib
erlang安裝:
http://www.erlang.org/download/otp_src_Rxxxxx.tar.gz
tar zxvf otp_src_Rxxxxx.tar.gz
cd otp_src_R15B02
./configure
make
make install
gnuplot安裝:
wget http://nchc.dl.sourceforge.net/project/gnuplot/gnuplot/x.x.x/gnuplot-x.x.x.tar.gz
tar -zxvf gnuplot-x.x.x.tar.gz
cd gnuplot-x.x.x
./configure
make
make install
template-toolki安裝:
wget http://www.cpan.org/modules/by-module/Template/Template-Toolkit-2.24.tar.gz
tar zxf Template-Toolkit-2.24.tar.gz
cd Template-Toolkit-2.24
perl Makefile.PL
make
make install
配置
配置Tsung:
~/.tsung/tsung.xml為tsung預設的配置檔案,但我們安裝後會發現這個目錄和檔案並不存在,那就由我們手動來建立這個目錄。
mkdir /home/.tsung
在/usr/share/doc/tsung/examples/中有一些示例檔案,可以參考jabber_register.xml檔案來編寫自己的tsung.xml。
cp /usr/share/doc/tsung/examples/jabber_register.xml ~/.tsung/tsung.xml
Work
啟動Tsung
tsung start/stop/debug/status
tsung -f /home/.tsung/tsung.xml start
進入日誌目錄
cd /root/.tsung/log/20120913-1436
執行指令碼生成報表檔案
/usr/local/lib/tsung/bin/tsung_stats.pl
檢視生成的報表:
通過nodeJS簡單弄一個指令碼,做出一個網頁來展示結果:
#! /usr/bin/env node
console.log('my_tsung_log');
var express = require('express');
var app = express();
var serveIndex = require('serve-index');
var serveStatic = require('serve-static');
var port = 80;
app.use('/log', serveIndex(__dirname + '/log', {'view': 'details', 'icons': true}));
app.use('/log', serveStatic(__dirname + '/log'));
app.get('/', function(req,res) {
res.send('Hello My Tsung!');
});
app.listen(port, function() {
console.log('webserver is running on port: '+port);
});
Case Study
執行結果時,需要準備一個xml配置檔案,以下是一個示範:
<?xml version="1.0"?><tsung dumptraffic="false" loglevel="error" version="1.0">
<clients>
<client host="localhost" use_controller_vm="true" maxusers="600000"/>
</clients>
<servers>
<server host="127.0.0.1" port="8001" type="tcp"/>
</servers>
<load duration="100" unit="second">
<arrivalphase phase="1" duration="10" unit="second">
<users arrivalrate="2000" unit="second"/>
</arrivalphase>
</load>
<options>
<option name="file_server" id="login_csv" value="sample_data"/>
</options>
<sessions>
<session bidi="true" probability="100" name="login" type="ts_http">
<setdynvars sourcetype="file" fileid="'login_csv'" order="iter">
<var name="data"/>
</setdynvars>
<request subst="true">
<http url="/test" version="1.1" content_type="application/json; charset=utf-8" method="POST" contents="%%_data%%">
</http>
</request>
</session>
</sessions>
</tsung>
以上測試命令是往127.0.0.1/test介面post資料
最後寫一個bash指令碼將測試命令封裝起來:
#!/usr/bin/env bash
echo "[Usage] ./run.sh <myCfg.xml>"
echo "or:"
echo "nohup ./run.sh <myCfg.xml> &"
config_file=api-refresh-stg2-trial.xml
report_home='./log'
if ! [ -d $report_home ]; then
mkdir $report_home
echo "initial log direcotry - done"
fi
if ! [ -e $report_home/readme.tx ]; then
cp readme.md $report_home/readme.txt
fi
touch "$report_home/timestamp-is-UTC-time"
echo "run load test"
if [ "v$1" != "v" ]; then
config_file=$1
fi
if ! [ -f $config_file ]; then
echo "fail to run due to config file does NOT exist! - $config_file"
exit 1
fi
echo "start load test for config $config_file"
tsung -f $config_file -l ./log start
echo "load test done!"
echo "generate report"
current_ip=`/sbin/ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'`
last_log=`ls -Art $report_home | grep -vi timestamp | grep -vi index | grep -iv readme| tail -n 1`
cp *.csv $report_home/$last_log/
cd $report_home/$last_log
/usr/local/lib/tsung/bin/tsung_stats.pl
echo "generate tsung reports http://$current_ip/log/$last_log/report.html (use web browser) - done"
相關文章
- 壓測工具 wrk
- kafka壓測工具Kafka
- 【工具】MySQL 壓測工具之mydbtestMySql
- Jmeter-壓測工具JMeter
- 壓力測試工具
- 效能壓測工具 —— wrk
- 壓測工具jemiter使用MIT
- 壓測工具之Sysbench(1_系統壓測)
- apache ab壓力測試工具-批次壓測指令碼Apache指令碼
- 壓測工具之Sysbench1.0(2_MySQL壓測)MySql
- 壓縮工具效能測試
- Webbench網站壓測工具Web網站
- 很好用的壓測工具 - Apache Bench工具Apache
- 效能測試:主流壓測工具介紹
- NoSQLBench壓測工具入門教程SQL
- 壓力測試工具之FIO
- 壓力測試工具之mysqlslapMySql
- 網站壓力測試工具網站
- Mysql 壓力測試工具sysbenchMySql
- 超實用壓力測試工具-ab工具
- 10大主流壓力測試工具
- CentOS 下安裝 wrk 壓測工具CentOS
- ELK esrally 壓測工具安裝使用
- 編寫一個介面壓測工具
- HTTP/FTP壓力測試工具siegeHTTPFTP
- Nginx壓力測試工具之WebBenchNginxWeb
- Web網站壓力測試工具Web網站
- Android大圖壓縮心得Android
- HTTP 壓測工具 wrk2 安利指南HTTP
- 三種web效能壓力測試工具Web
- 分散式TCP壓力測試工具 tcpcopy分散式TCP
- MySQL基準壓力測試工具MySQLSlapMySql
- 併發網站壓力測試工具網站
- 官方壓測工具mysqlslap介紹及使用MySql
- Linux系統壓力測試工具(命令列工具)Linux命令列
- 效能測試——壓測工具locust——指令碼初步編寫指令碼
- MySQL壓測工具mysqlslap的介紹與使用MySql
- nodejs版的websocket壓力測試工具NodeJSWeb