| #!/usr/bin/env bash |
| # |
| #(c) 2004-present, Facebook Inc. All rights reserved. |
| # |
| #see LICENSE file for more information on use/redistribution rights. |
| # |
| |
| # |
| #dbench_monitor: monitor db_bench process for violation of memory utilization |
| # |
| #default usage will monitor 'virtual memory size'. See below for standard options |
| #passed to db_bench during this test. |
| # |
| # See also: ./pflag for the actual monitoring script that does the work |
| # |
| #NOTE: |
| # You may end up with some /tmp/ files if db_bench OR |
| # this script OR ./pflag was killed unceremoniously |
| # |
| # If you see the script taking a long time, trying "kill" |
| # will usually cleanly exit. |
| # |
| # |
| DIR=`dirname $0` |
| LOG=/tmp/`basename $0`.$$ |
| DB_BENCH="$DIR/../db_bench"; |
| PFLAG=${DIR}/pflag |
| |
| usage() { |
| cat <<HELP; exit |
| |
| Usage: $0 [-h] |
| |
| -h: prints this help message |
| |
| This program will run the db_bench script to monitor memory usage |
| using the 'pflag' program. It launches db_bench with default settings |
| for certain arguments. You can change the defaults passed to |
| 'db_bench' program, by setting the following environment |
| variables: |
| |
| bs [block_size] |
| ztype [compression_type] |
| benches [benchmarks] |
| reads [reads] |
| threads [threads] |
| cs [cache_size] |
| vsize [value_size] |
| comp [compression_ratio] |
| num [num] |
| |
| See the code for more info |
| |
| HELP |
| |
| } |
| |
| [ ! -x ${DB_BENCH} ] && echo "WARNING: ${DB_BENCH} doesn't exist, abort!" && exit -1; |
| |
| [ "x$1" = "x-h" ] && usage; |
| |
| trap 'rm -f ${LOG}; kill ${PID}; echo "Interrupted, exiting";' 1 2 3 15 |
| |
| touch $LOG; |
| |
| : ${bs:=16384} |
| : ${ztype:=zlib} |
| : ${benches:=readwhilewriting} |
| : ${reads:=$((1*1024*1024))}; |
| : ${threads:=8} |
| : ${vsize:=2000} |
| : ${comp:=0.5} |
| : ${num:=10000} |
| : ${cs:=$((1*1024*1024*1024))}; |
| |
| DEBUG=1 #Set to 0 to remove chattiness |
| |
| |
| if [ "x$DEBUG" != "x" ]; then |
| # |
| #NOTE: under some circumstances, --use_existing_db may leave LOCK files under ${TMPDIR}/rocksdb/* |
| #cleanup the dir and re-run |
| # |
| echo DEBUG: Will run $DB_BENCH --block_size=$bs --compression_type=$ztype --benchmarks="$benches" --reads="$reads" --threads="$threads" --cache_size=$cs --value_size=$vsize --compression_ratio=$comp --num=$num --use_existing_db |
| |
| fi |
| |
| $DB_BENCH --block_size=$bs --compression_type=$ztype --benchmarks="$benches" --reads="$reads" --threads="$threads" --cache_size=$cs --value_size=$vsize --compression_ratio=$comp --num=$num --use_existing_db >$LOG 2>&1 & |
| |
| if [ $? -ne 0 ]; then |
| warn "WARNING: ${DB_BENCH} did not launch successfully! Abort!"; |
| exit; |
| fi |
| PID=$! |
| |
| # |
| #Start the monitoring. Default is "vsz" monitoring for upto cache_size ($cs) value of virtual mem |
| #You could also monitor RSS and CPUTIME (bsdtime). Try 'pflag -h' for how to do this |
| # |
| ${PFLAG} -p $PID -v |
| |
| rm -f $LOG; |