Skip to content

Instantly share code, notes, and snippets.

@tenforward
Created November 16, 2011 11:22
Show Gist options
  • Select an option

  • Save tenforward/1369867 to your computer and use it in GitHub Desktop.

Select an option

Save tenforward/1369867 to your computer and use it in GitHub Desktop.
JDBCBench
○グラフ生成
* 共通
1. logs ディレクトリをコピーしてくる
* sysstat グラフ
2. bash iosummary.sh
3. bash graph.sh
* JDBCBench 結果グラフ用データファイル
2. bash summary.sh
3. 出来上がった 各 logs/summary.txt を集めて gnuplot で適当にグラフを作る
#!/bin/bash
#
# test base dir
#testbase="/root/jdbcbench"
testbase=`dirname $0`
# ssh host (servers for get sysstat info.)
ssh_hosts="127.0.0.1"
USE_SSH="false"
# db server
server="127.0.0.1"
# db auth info
dbuser=test
dbpassword=test
# jdbc info (MySQL)
jdbcdriver=$testbase/mysql-connector-java-5.1.12.jar
dbname="test"
mysqlopt="-innodb"
# benchmark class name
class=JDBCBench
# java env.
java=/usr/bin/java
jps=/usr/bin/jps
classpath="$testbase:$jdbcdriver"
javaopt=""
# benchmark parameter
#tpc=10000
tpc=10
logbase="$testbase/logs"
# client
clients="1 2"
#clients="1 20 40 60 80 100"
# set benchmark class option
case "$1" in
init)
benchopt="-init"
;;
*)
benchopt=""
;;
esac
# make directory for saving log
if [ -d $logbase ]; then
mv $logbase $logbase.bak
fi
mkdir -p $logbase
driver=com.mysql.jdbc.Driver
url="jdbc:mysql://$server/$dbname?user=$dbuser&password=$dbpassword"
# bench
for n in $clients
do
# mkdir logdir
logdir="$logbase/$n"
mkdir -p $logdir
# start sysstat
USE_SSH=$USE_SSH SSH_SERVERS=$ssh_hosts ./sar.sh start
echo "$n clients test start."
$java $javaopt -cp $classpath $class \
$benchopt $mysqlopt -driver $driver \
-url $url -v -tpc $tpc -clients $n 2>&1 \
| tee $logdir/jdbcbench.$n.log
echo "$n clients test stop."
USE_SSH=$USE_SSH SSH_SERVERS=$ssh_hosts ./sar.sh stop
LOGDIR=$logdir USE_SSH=$USE_SSH SSH_SERVERS=$ssh_hosts ./sar.sh getlog
USE_SSH=$USE_SSH SSH_SERVERS=$ssh_hosts ./sar.sh rmlog
done
exit 0
set term postscript eps
set output 'cpu.eps'
set xlabel 'Time'
set ylabel 'CPU Utilization(%)'
set xdata time
set yrange [0:110]
set timefmt '%H:%M:%S'
set datafile missing 'Linux'
plot '%%FILENAME%%' using 1:($3+$5) with lines title '%user+%system'
#!/bin/bash
#
# Generate Graph of JDBCBench Test
#
BASEDIR=`dirname $0`
LOGDIR="./logs"
for d in `ls $LOGDIR/`
do
if [ ! -d $LOGDIR/$d ]; then
continue
fi
echo "=== $d ==="
cpu=`basename $LOGDIR/$d/*.u.sar`
memory=`basename $LOGDIR/$d/*.r.sar`
la=`basename $LOGDIR/$d/*.q.sar`
iostat=`basename $LOGDIR/$d/io_summary`
sed -e "s|%%FILENAME%%|$cpu|" $BASEDIR/cpu > $LOGDIR/$d/cpu
sed -e "s|%%FILENAME%%|$memory|" $BASEDIR/memory > $LOGDIR/$d/memory
sed -e "s|%%FILENAME%%|$la|" $BASEDIR/la > $LOGDIR/$d/la
sed -e "s|%%FILENAME%%|$iostat|" $BASEDIR/iostat > $LOGDIR/$d/iostat
pushd $LOGDIR/$d
gnuplot < cpu
gnuplot < memory
gnuplot < la
gnuplot < iostat
popd
done
set term postscript eps
set output 'iostat.eps'
set xlabel 'Time'
set ylabel 'IOPS(/s)'
#set xdata time
#set yrange [0:110]
set timefmt '%H:%M:%S'
set datafile missing 'Linux'
plot '%%FILENAME%%' using 4 with lines title 'The number of read req. completed', '' using 5 with lines title 'The number of write req. completed'
#!/bin/bash
#
# Generate Graph of JDBCBench Test
#
BASEDIR=`dirname $0`
LOGDIR="./logs"
if [ -z $1 ]; then
echo "usage: $0 [device name]"
exit 1
fi
for d in `ls $LOGDIR/`
do
if [ ! -d $LOGDIR/$d ]; then
continue
fi
echo "=== $d ==="
iostat=`basename $LOGDIR/$d/*.x.iostat`
pushd $LOGDIR/$d
grep $1 $iostat > io_summary
popd
done
set term postscript eps
set output 'la.eps'
set xlabel 'Time'
set ylabel 'Load Average'
set xdata time
#set yrange [0:110]
set timefmt '%H:%M:%S'
set datafile missing 'Linux'
plot '%%FILENAME%%' using 1:4 with lines title 'load average'
set term postscript eps
set output 'memory.eps'
set xlabel 'Time'
set ylabel 'Memory Utilization(KByte)'
set xdata time
set timefmt '%H:%M:%S'
set datafile missing "Linux"
plot '%%FILENAME%%' using 1:($3-$5-$6) with lines title 'kbmemused - kbcached - kbbuffers', '' using 1:8 with lines title 'kbswpused'
#!/bin/sh
# original is from jbento (http://jbento.sourceforge.net/ja/index.html)
SAR_LOGDIR=${SAR_LOGDIR-/tmp/bench-sar}
SAR_INTERVAL=${SAR_INTERVAL-1}
USE_SSH=${USE_SSH-true}
SSH_SERVERS=${SSH_SERVERS-"kuma01 kuma02 kuma03 kuma04 kuma05 kuma06 kuma07 kuma08 kuma09 kuma10"}
COMMAND=${1-unknown}
case $COMMAND in
start)
if [ "$USE_SSH" = "true" ]
then
for server in $SSH_SERVERS
do
echo $server
ssh $server mkdir -p $SAR_LOGDIR
ssh $server sh <<- EOF 2>&1 >/dev/null &
LANG=C iostat -x $SAR_INTERVAL > $SAR_LOGDIR/$server.x.iostat &
LANG=C sar -u $SAR_INTERVAL > $SAR_LOGDIR/$server.u.sar &
LANG=C sar -r $SAR_INTERVAL > $SAR_LOGDIR/$server.r.sar &
LANG=C sar -q $SAR_INTERVAL > $SAR_LOGDIR/$server.q.sar &
LANG=C sar -b $SAR_INTERVAL > $SAR_LOGDIR/$server.b.sar &
LANG=C sar -B $SAR_INTERVAL > $SAR_LOGDIR/$server.B.sar &
LANG=C sar -d $SAR_INTERVAL > $SAR_LOGDIR/$server.d.sar &
LANG=C sar -W $SAR_INTERVAL > $SAR_LOGDIR/$server.W.sar &
LANG=C sar -n DEV $SAR_INTERVAL > $SAR_LOGDIR/$server.nDEV.sar &
LANG=C sar -n EDEV $SAR_INTERVAL > $SAR_LOGDIR/$server.nEDEV.sar &
EOF
done
else
mkdir -p $SAR_LOGDIR
server=localhost
iostat -x $SAR_INTERVAL > $SAR_LOGDIR/$server.x.iostat &
LANG=C sar -u $SAR_INTERVAL > $SAR_LOGDIR/$server.u.sar &
LANG=C sar -r $SAR_INTERVAL > $SAR_LOGDIR/$server.r.sar &
LANG=C sar -q $SAR_INTERVAL > $SAR_LOGDIR/$server.q.sar &
LANG=C sar -b $SAR_INTERVAL > $SAR_LOGDIR/$server.b.sar &
LANG=C sar -B $SAR_INTERVAL > $SAR_LOGDIR/$server.B.sar &
LANG=C sar -d $SAR_INTERVAL > $SAR_LOGDIR/$server.d.sar &
LANG=C sar -W $SAR_INTERVAL > $SAR_LOGDIR/$server.W.sar &
LANG=C sar -n DEV $SAR_INTERVAL > $SAR_LOGDIR/$server.nDEV.sar &
LANG=C sar -n EDEV $SAR_INTERVAL > $SAR_LOGDIR/$server.nEDEV.sar &
fi
;;
stop)
if [ "$USE_SSH" = "true" ]
then
for server in $SSH_SERVERS
do
ssh $server killall -15 sar
ssh $server killall -15 iostat
done
else
killall -15 sar
killall -15 iostat
fi
;;
getlog)
if [ "$USE_SSH" = "true" ]
then
for server in $SSH_SERVERS
do
mkdir -p $LOGDIR/$server
scp -Cpq $server:$SAR_LOGDIR/* $LOGDIR/$server
done
else
cp -p $SAR_LOGDIR/* $LOGDIR
fi
;;
rmlog)
if [ "$USE_SSH" = "true" ]
then
for server in $SSH_SERVERS
do
ssh $server rm -rf $SAR_LOGDIR
done
else
rm -rf $SAR_LOGDIR
fi
;;
*)
echo "Usage: $0 [start|stop|getlog|rmlog]"
;;
esac
#!/bin/bash
#
#testbase="/root/jdbcbench"
testbase=`dirname $0`
logbase="$testbase/logs"
for d in `ls $logbase | sort -g | grep -v summary.txt | grep -v time.txt`
do
echo $d
rate=`grep Transaction logs/$d/jdbcbench.$d.log | awk '{print $3}'`
time=`grep "Time to execute" logs/$d/jdbcbench.$d.log | awk '{print $6}'`
touch $logbase/summary.txt
touch $logbase/time.txt
echo "$d $rate" >> $logbase/summary.txt
echo "$d $time" >> $logbase/time.txt
done
# Generate graph of JDBCBench results
set xlabel "Clients"
set ylabel "Transactions per sec"
plot "logs/summary.txt" with linespoint
set term postscript eps
set output 'swap.eps'
set xlabel 'Time'
set ylabel 'Swapin/out(times)'
plot '%%FILENAME%%' using 1:2 with lines title 'pswpin/s', '' using 1:3 with lines title 'pswpout/s'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment