Skip to content

Instantly share code, notes, and snippets.

@wellflat
Created August 21, 2016 07:22
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wellflat/79f76aa1f959ee06c882f0ca0d1de9b9 to your computer and use it in GitHub Desktop.
Save wellflat/79f76aa1f959ee06c882f0ca0d1de9b9 to your computer and use it in GitHub Desktop.
read smaps file (Linuxプロセスのメモリ共有率を計算)
#!/usr/bin/env python
import sys
def read_smaps(pidlist):
try:
print("PID\tRSS\tSHARED\t\tNONE_SHARED")
mem = lambda t, f: int(f[1]) if f[0] == '%s:' % t else 0.0
for pid in pidlist:
filename = "/proc/%s/smaps" % pid
with open(filename) as f:
rss = 0.0
shared = 0.0
for line in f:
fields = line.split()
rss += mem('Rss', fields)
shared += mem('Shared_Clean', fields)
shared += mem('Shared_Dirty', fields)
print("%s\t%d\t%d (%.2f%%)\t%d" %
(pid, rss, shared, shared/rss*100, rss - shared))
except IOError as e:
print(e)
if __name__ == '__main__':
if len(sys.argv) < 2:
print("usage: %s [pids]" % __file__)
sys.exit(-1)
read_smaps(sys.argv[1:])
@wellflat
Copy link
Author

wellflat commented Aug 21, 2016

使用例は以下の通り

$ sudo ./read_smaps.py
usage: ./read_smap.py [pids]

## PIDのリストをpgrepコマンドで指定して、プログラムのメモリ使用量(共有率)を計算する
$ sudo ./read_smaps.py `pgrep train_model.py`
PID     RSS     SHARED          NONE_SHARED
23241   330396  202516 (61.29%) 127880
23246   414720  202476 (48.82%) 212244
23247   414836  202480 (48.81%) 212356
23248   414196  202440 (48.88%) 211756

同内容をQiitaにも投稿

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment