そのような情報/proc/<pid>/smaps
は、Pss
エントリの形式で各プロセスのファイルから取得できます(「比例共有サイズ」の略)。
2つのプロセス間で「共有」された200MBの上記の例では、各プロセスはそのマッピングのPSSエントリに100MBを示します。つまり、メモリはそれを共有するプロセス間で均等に分散されます(どちらかのプロセスによってコピーおよび共有解除されるまで)。
ここにあなたが投稿したようなものを実行することからの抜粋があります:
$ top
...
30986 me 20 0 790m 769m 2200 S 0 4.8 0:00.48 python3.2
30987 me 20 0 790m 767m 224 S 0 4.8 0:00.00 python3.2
$ cat /proc/30986/smaps
...
0119a000-015b7000 rw-p 00000000 00:00 0 [heap]
Size: 4212 kB
Rss: 3924 kB
Pss: 1992 kB
...
7fa06b020000-7fa09ab11000 rw-p 00000000 00:00 0
Size: 781252 kB
Rss: 781252 kB
Pss: 390626 kB
...
7fff8e45a000-7fff8e489000 rw-p 00000000 00:00 0 [stack]
Size: 192 kB
Rss: 160 kB
Pss: 82 kB
...
(これらのファイルには、多くのプロセス間で共有される可能性のある共有ライブラリのマッピングなど、多くのものが含まれているため、各プロセスは、それらのPSSエントリに含まれるほんの一部しか取得しません。)
ELC:アプリケーションが実際にどれだけのメモリを使用しているのですか?
私はこの情報を表示する一般的なトップライクなツールを知りませんps
し、残念ながらそれを表示するオプションもないと思います。この記事はpagemap
、Matt Mackallが呼び出したPythonスクリプトを使用したリポジトリを示していますが、これを使用したり、変更したりすることができます。
恥知らずなプラグイン:興味がある場合は、PSSおよびファイルに関するUnixおよびLinuxの投稿をいくつか見つけますsmaps
。