author | Nicolas Dumazet <nicdumz.commits@gmail.com> |
Mon, 21 Dec 2009 20:30:37 +0100 | |
changeset 10109 | be041d6714ed |
parent 10017 | 253d0da256b2 |
child 10264 | d6512b3e9ac0 |
permissions | -rw-r--r-- |
10017
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
1 |
# memory.py - track memory usage |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
2 |
# |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
3 |
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
4 |
# |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
5 |
# This software may be used and distributed according to the terms of the |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
6 |
# GNU General Public License version 2, incorporated herein by reference. |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
7 |
|
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
8 |
'''helper extension to measure memory usage |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
9 |
|
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
10 |
Reads current and peak memory usage from ``/proc/self/status`` and |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
11 |
prints it to ``stderr`` on exit. |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
12 |
''' |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
13 |
|
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
14 |
import atexit |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
15 |
|
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
16 |
def memusage(ui): |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
17 |
"""Report memory usage of the current process.""" |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
18 |
status = None |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
19 |
result = {'peak': 0, 'rss': 0} |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
20 |
try: |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
21 |
# This will only work on systems with a /proc file system |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
22 |
# (like Linux). |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
23 |
status = open('/proc/self/status', 'r') |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
24 |
for line in status: |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
25 |
parts = line.split() |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
26 |
key = parts[0][2:-1].lower() |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
27 |
if key in result: |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
28 |
result[key] = int(parts[1]) |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
29 |
finally: |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
30 |
if status is not None: |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
31 |
status.close() |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
32 |
ui.write_err(", ".join(["%s: %.1f MiB" % (key, value/1024.0) |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
33 |
for key, value in result.iteritems()]) + "\n") |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
34 |
|
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
35 |
def extsetup(ui): |
253d0da256b2
contrib: helper extension to track memory usage
Martin Geisler <mg@lazybytes.net>
parents:
diff
changeset
|
36 |
atexit.register(memusage, ui) |