|
Packit |
bbb0ff |
#!/usr/bin/python
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Authors: Petr Muller <pmuller@redhat.com>
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# Description: Prints a memory consumption peak of an executed program
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# Copyright (c) 2008 Red Hat, Inc. All rights reserved. This copyrighted
|
|
Packit |
bbb0ff |
# material is made available to anyone wishing to use, modify, copy, or
|
|
Packit |
bbb0ff |
# redistribute it subject to the terms and conditions of the GNU General
|
|
Packit |
bbb0ff |
# Public License v.2.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
Packit |
bbb0ff |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
Packit |
bbb0ff |
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
Packit |
bbb0ff |
# for more details.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# You should have received a copy of the GNU General Public License
|
|
Packit |
bbb0ff |
# along with this program; if not, write to the Free Software
|
|
Packit |
bbb0ff |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
import sys, time, re
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
use_sub = False
|
|
Packit |
bbb0ff |
use_popen = False
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
try:
|
|
Packit |
bbb0ff |
import subprocess
|
|
Packit |
bbb0ff |
use_sub = True
|
|
Packit |
bbb0ff |
except ImportError:
|
|
Packit |
bbb0ff |
import popen2
|
|
Packit |
bbb0ff |
use_popen = True
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if len(sys.argv) < 2:
|
|
Packit |
bbb0ff |
print 'syntax: rlMemPeak <command>'
|
|
Packit |
bbb0ff |
sys.exit(1)
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
proglist = sys.argv[1:]
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if use_sub:
|
|
Packit |
bbb0ff |
task = subprocess.Popen(proglist)
|
|
Packit |
bbb0ff |
elif use_popen:
|
|
Packit |
bbb0ff |
task = popen2.Popen3(" ".join(proglist))
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
maxmem = 0
|
|
Packit |
bbb0ff |
fn = '/proc/%d/status' % task.pid
|
|
Packit |
bbb0ff |
mre = re.compile(r'VmRSS:[ \t]+(?P<mem>\d+)')
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
while True:
|
|
Packit |
bbb0ff |
for line in open(fn, 'r').readlines():
|
|
Packit |
bbb0ff |
m = mre.search(line)
|
|
Packit |
bbb0ff |
if m:
|
|
Packit |
bbb0ff |
mem = int(m.group('mem'))
|
|
Packit |
bbb0ff |
maxmem = max(mem, maxmem)
|
|
Packit |
bbb0ff |
break
|
|
Packit |
bbb0ff |
time.sleep(0.1)
|
|
Packit |
bbb0ff |
finish = task.poll()
|
|
Packit |
bbb0ff |
if (use_sub and finish != None) or (use_popen and finish != -1):
|
|
Packit |
bbb0ff |
break
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
print "%d" % (maxmem)
|