Skip to content

Instantly share code, notes, and snippets.

@coreylynch
Forked from joferkington/profile.sh
Created October 4, 2012 18:48
Show Gist options
  • Save coreylynch/3835603 to your computer and use it in GitHub Desktop.
Save coreylynch/3835603 to your computer and use it in GitHub Desktop.
Brute force memory monitor
# /bin/sh
# Setup
datfile=$(mktemp)
echo "ElapsedTime MemUsed" > $datfile
starttime=$(date +%s.%N)
# Run the specified command in the background
$@ &
# While the last process is still going
while [ -n "`ps --no-headers $!`" ]
do
bytes=$(ps -o rss -C $1 --no-headers | awk '{SUM += $1} END {print SUM}')
elapsed=$(echo $(date +%s.%N) - $starttime | bc)
if [ $bytes ]
then
echo $elapsed $bytes >> $datfile
fi
sleep 0.05
done
cat $datfile
# Plot up the results with matplotlib
cat <<EOF | python
import pylab, sys, numpy
infile = file("$datfile")
infile.readline() # skip first line
data = numpy.loadtxt(infile)
time,mem = data[:,0], data[:,1]/1024
pylab.plot(time,mem)
pylab.title("Profile of: """ "\"%s\" """ % "$@")
pylab.xlabel('Elapsed Time (s): Total %0.5f s' % time.max())
pylab.ylabel('Memory Used (MB): Peak %0.2f MB' % mem.max())
pylab.show()
EOF
rm $datfile
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment