forked from milianw/shell-helpers
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtrack_memory.sh
More file actions
executable file
·67 lines (56 loc) · 1.21 KB
/
Copy pathtrack_memory.sh
File metadata and controls
executable file
·67 lines (56 loc) · 1.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/bin/bash
#
# track memory of given application, identified by PID,
# using pmap -x, to show RSS and Dirty memory usage.
#
# visualization can later on be done with the
# show_memory.sh script.
#
pid=$1
sleep=1;
if [[ "$(ps -p $pid 2>/dev/null | grep $pid)" == "" ]]; then
# maybe a command was given
if [[ "$(which $1)" != "" ]]; then
echo "launching: $@"
$@ &
pid=$!
fi
else
if [[ "$2" != "" ]]; then
sleep=$2
fi
fi
if [[ "$(ps -p $pid | grep $pid)" == "" ]]; then
echo "cannot find program with pid $pid"
echo "track_memory.sh PID [SLEEP_TIMEOUT]"
echo
echo "example: track_memory.sh \$(pidof someapp) 0.1"
exit
fi
logfile=mem.log.$pid
echo "# $(ps -o command= -p $pid)" > $logfile
echo "# $sleep" >> $logfile
cat $logfile
read -r -d '' summer <<'AWK'
{
if ($1 == "total") {
rss = $4
dirty = $5
} else if ($7 == "anon") {
heap += $3
} else if ($7 == "stack") {
stack += $3
}
}
END {
print rss,dirty,heap,stack
}
AWK
while [[ "$(ps -p $pid | grep $pid)" != "" ]]; do
echo -n "snapshot $pid: "
pmap -x $pid | awk "$summer" | tee -a $logfile
sleep $sleep
done
echo "done tracking, visualizing"
$(dirname $0)/show_memory.sh "$logfile"
# kate: replace-tabs on;