psutil

Форк
0
/
procsmem.py 
107 строк · 3.7 Кб
1
#!/usr/bin/env python3
2

3
# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved.
4
# Use of this source code is governed by a BSD-style license that can be
5
# found in the LICENSE file.
6

7
"""Show detailed memory usage about all (querable) processes.
8

9
Processes are sorted by their "USS" (Unique Set Size) memory, which is
10
probably the most representative metric for determining how much memory
11
is actually being used by a process.
12

13
This is similar to "smem" cmdline utility on Linux:
14
https://www.selenic.com/smem/
15

16
Author: Giampaolo Rodola' <g.rodola@gmail.com>
17

18
~/svn/psutil$ ./scripts/procsmem.py
19
PID     User    Cmdline                            USS     PSS    Swap     RSS
20
==============================================================================
21
...
22
3986    giampao /usr/bin/python3 /usr/bin/indi   15.3M   16.6M      0B   25.6M
23
3906    giampao /usr/lib/ibus/ibus-ui-gtk3       17.6M   18.1M      0B   26.7M
24
3991    giampao python /usr/bin/hp-systray -x    19.0M   23.3M      0B   40.7M
25
3830    giampao /usr/bin/ibus-daemon --daemoni   19.0M   19.0M      0B   21.4M
26
20529   giampao /opt/sublime_text/plugin_host    19.9M   20.1M      0B   22.0M
27
3990    giampao nautilus -n                      20.6M   29.9M      0B   50.2M
28
3898    giampao /usr/lib/unity/unity-panel-ser   27.1M   27.9M      0B   37.7M
29
4176    giampao /usr/lib/evolution/evolution-c   35.7M   36.2M      0B   41.5M
30
20712   giampao /usr/bin/python -B /home/giamp   45.6M   45.9M      0B   49.4M
31
3880    giampao /usr/lib/x86_64-linux-gnu/hud/   51.6M   52.7M      0B   61.3M
32
20513   giampao /opt/sublime_text/sublime_text   65.8M   73.0M      0B   87.9M
33
3976    giampao compiz                          115.0M  117.0M      0B  130.9M
34
32486   giampao skype                           145.1M  147.5M      0B  149.6M
35

36
"""
37

38
from __future__ import print_function
39

40
import sys
41

42
import psutil
43

44

45
if not (psutil.LINUX or psutil.MACOS or psutil.WINDOWS):
46
    sys.exit("platform not supported")
47

48

49
def convert_bytes(n):
50
    symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
51
    prefix = {}
52
    for i, s in enumerate(symbols):
53
        prefix[s] = 1 << (i + 1) * 10
54
    for s in reversed(symbols):
55
        if n >= prefix[s]:
56
            value = float(n) / prefix[s]
57
            return '%.1f%s' % (value, s)
58
    return "%sB" % n
59

60

61
def main():
62
    ad_pids = []
63
    procs = []
64
    for p in psutil.process_iter():
65
        with p.oneshot():
66
            try:
67
                mem = p.memory_full_info()
68
                info = p.as_dict(["cmdline", "username"])
69
            except psutil.AccessDenied:
70
                ad_pids.append(p.pid)
71
            except psutil.NoSuchProcess:
72
                pass
73
            else:
74
                p._uss = mem.uss
75
                p._rss = mem.rss
76
                if not p._uss:
77
                    continue
78
                p._pss = getattr(mem, "pss", "")
79
                p._swap = getattr(mem, "swap", "")
80
                p._info = info
81
                procs.append(p)
82

83
    procs.sort(key=lambda p: p._uss)
84
    templ = "%-7s %-7s %7s %7s %7s %7s %7s"
85
    print(templ % ("PID", "User", "USS", "PSS", "Swap", "RSS", "Cmdline"))
86
    print("=" * 78)
87
    for p in procs[:86]:
88
        cmd = " ".join(p._info["cmdline"])[:50] if p._info["cmdline"] else ""
89
        line = templ % (
90
            p.pid,
91
            p._info["username"][:7] if p._info["username"] else "",
92
            convert_bytes(p._uss),
93
            convert_bytes(p._pss) if p._pss else "",
94
            convert_bytes(p._swap) if p._swap else "",
95
            convert_bytes(p._rss),
96
            cmd,
97
        )
98
        print(line)
99
    if ad_pids:
100
        print(
101
            "warning: access denied for %s pids" % (len(ad_pids)),
102
            file=sys.stderr,
103
        )
104

105

106
if __name__ == '__main__':
107
    sys.exit(main())
108

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.