#!/bin/bash
INTERVAL=${1:-1}
TOPN=${2:-20}
echo "======================================"
echo " MongoDB Thread CPU Monitor"
echo " Time: $(date)"
echo " Interval: ${INTERVAL}s"
echo "======================================"
MONGOPIDS=$(pidof mongod)
if [ -z "$MONGOPIDS" ]; then
echo "No mongod process found"
exit 1
fi
for PID in $MONGOPIDS
do
echo
echo "######################################"
echo " mongod PID: $PID"
echo "######################################"
THREADS=$(ls /proc/$PID/task 2>/dev/null | wc -l)
echo "Thread Count: $THREADS"
echo
echo "Top ${TOPN} CPU Threads:"
echo "--------------------------------------"
ps -T -p $PID \
-o pid,tid,pcpu,pmem,stat,etime,comm \
--sort=-pcpu \
| head -$((TOPN+1))
echo
echo "Thread State:"
echo "--------------------------------------"
ps -T -p $PID \
-o stat \
| awk 'NR>1 {count[$1]++}
END{
for(i in count)
print i,count[i]
}'
done
echo
echo "======================================"
echo " System Thread Context Switch"
echo "======================================"
if command -v pidstat >/dev/null 2>&1
then
pidstat -wt -p $(echo $MONGOPIDS | tr ' ' ',') $INTERVAL 1
else
echo "pidstat not installed"
fi