Windshaft-cartodb/tools/checkfds.sh

88 lines
2.4 KiB
Bash
Raw Normal View History

2013-02-07 19:32:06 +08:00
#!/bin/sh
2013-02-08 23:47:59 +08:00
envnik=$(basename "${TILER_ENVIRONMENT}" .js)
if test "$1" = "config"; then
2013-02-09 00:05:43 +08:00
echo "graph_title fd usage (${envnik})"
2013-02-08 23:47:59 +08:00
cat <<"EOM"
2013-02-09 00:05:43 +08:00
graph_vlabel number of file descriptors
graph_category windshaft
2013-02-09 00:48:54 +08:00
graph_scale no
procs.label Number of tiler processes
pgsql.label PostgreSQL connections (max)
redis.label Redis connections (max)
http.label Incoming http requests (max)
caches.label Number of renderer caches (max)
2013-02-09 00:05:43 +08:00
nfd.label Total file descriptors (max)
EOM
exit 0
fi
if test x"$1" != x; then
TILER_ENVIRONMENT=$(cd $(dirname $0); pwd)/../config/environments/${1}.js
fi
if test -z "$TILER_ENVIRONMENT"; then
echo "Usage: $0 [<environment>]" >&2
echo " or: [TILER_ENVIRONMENT=<environment>] $0" >&2
exit 1
fi
http_port=$(echo "console.log(require('${TILER_ENVIRONMENT}').port)" | node) || exit 1
pgsql_port=$(echo "console.log(require('${TILER_ENVIRONMENT}').postgres.port)" | node) || exit 1
redis_port=$(echo "console.log(require('${TILER_ENVIRONMENT}').redis.port)" | node) || exit 1
2013-02-07 19:32:06 +08:00
pids=$(lsof -i :${http_port} | grep LISTEN | awk '{print $2}')
nworkers=$(echo "${pids}" | wc -l)
pids=$(echo "${pids}" | paste -sd ' ')
2013-02-07 19:32:06 +08:00
if test -z "${pids}"; then
echo "No processes found listening on tcp port '${http_port}'" >&2
exit 1
fi
tmpreport="/tmp/checkfd.$$.txt"
2013-02-07 19:32:06 +08:00
lsof -p $(echo "${pids}" | tr ' ' ',') > "${tmpreport}"
2013-02-07 19:32:06 +08:00
maxdb=0
maxredis=0
maxhttp=0
maxtot=0
maxcache=0
2013-02-07 19:32:06 +08:00
for pid in ${pids}; do
cnt=$(grep "${pid}" "${tmpreport}" | grep ":${pgsql_port} " | wc -l);
if test $cnt -gt $maxdb; then maxdb=$cnt; fi
cnt=$(grep "${pid}" "${tmpreport}" | grep ":${redis_port} " | wc -l);
if test $cnt -gt $maxredis; then maxredis=$cnt; fi
cnt=$(grep "${pid}" "${tmpreport}" | grep ":${http_port}-" | grep -v "LISTEN" | wc -l);
if test $cnt -gt $maxhttp; then maxhttp=$cnt; fi
cnt=$(grep "${pid}" "${tmpreport}" | wc -l);
if test $cnt -gt $maxtot; then maxtot=$cnt; fi
log=$(grep "${pid}" "${tmpreport}" | grep -w 1w | awk '{print $9}')
if test -e "${log}"; then
kill -USR1 "${pid}"
cnt=$(tac ${log} | sed -n -e '/ItemKey/p;/^RenderCache/q' | wc -l)
if test $cnt -gt $maxcache; then maxcache=$cnt; fi
else
# report the error...
maxcache=-1
fi
2013-02-07 19:32:06 +08:00
done
echo "procs.value ${nworkers}"
echo "pgsql.value ${maxdb}"
echo "redis.value ${maxredis}"
echo "http.value ${maxhttp}"
echo "caches.value ${maxcache}"
echo "nfd.value ${maxtot}"
2013-02-07 19:32:06 +08:00
rm -f "${tmpreport}"