summaryrefslogtreecommitdiff
path: root/rdiff-backup/testing/find-max-ram.py
diff options
context:
space:
mode:
Diffstat (limited to 'rdiff-backup/testing/find-max-ram.py')
-rwxr-xr-xrdiff-backup/testing/find-max-ram.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/rdiff-backup/testing/find-max-ram.py b/rdiff-backup/testing/find-max-ram.py
new file mode 100755
index 0000000..41685f1
--- /dev/null
+++ b/rdiff-backup/testing/find-max-ram.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+
+"""find-max-ram - Returns the maximum amount of memory used by a program.
+
+Every half second, run ps with the appropriate commands, getting the
+size of the program. Return max value.
+
+"""
+
+import os, sys, time
+
+def get_val(cmdstr):
+ """Runs ps and gets sum rss for processes making cmdstr
+
+ Returns None if process not found.
+
+ """
+ cmd = ("ps -Ao cmd -o rss | grep '%s' | grep -v grep" % cmdstr)
+# print "Running ", cmd
+ fp = os.popen(cmd)
+ lines = fp.readlines()
+ fp.close()
+
+ if not lines: return None
+ else: return reduce(lambda x,y: x+y, map(read_ps_line, lines))
+
+def read_ps_line(psline):
+ """Given a specially formatted line by ps, return rss value"""
+ l = psline.split()
+ assert len(l) >= 2 # first few are name, last one is rss
+ return int(l[-1])
+
+
+def main(cmdstr):
+ while get_val(cmdstr) is None: time.sleep(0.5)
+
+ current_max = 0
+ while 1:
+ rss = get_val(cmdstr)
+ print rss
+ if rss is None: break
+ current_max = max(current_max, rss)
+ time.sleep(0.5)
+
+ print current_max
+
+
+if __name__=="__main__":
+
+ if len(sys.argv) != 2:
+ print """Usage: find-max-ram [command string]
+
+ It will then run ps twice a second and keep totalling how much RSS
+ (resident set size) the process(es) whose ps command name contain the
+ given string use up. When there are no more processes found, it will
+ print the number and exit.
+ """
+ sys.exit(1)
+ else: main(sys.argv[1])
+