我想监视进程的内存使用情况,并且希望记录此数据。是否存在这样的工具?
1
我认为有关以编程方式监视进程内存使用情况的链接对您解决需求很有用。
—
森,
我想监视进程的内存使用情况,并且希望记录此数据。是否存在这样的工具?
Answers:
我已经写了一个脚本来做到这一点。它基本上ps
以特定的间隔进行采样,以建立特定过程的配置文件。该进程可以由监视工具本身启动,也可以是一个独立的进程(由pid或命令模式指定)。
有时,当需要出现时,我会做:
$ top -d 1 -b |grep <process> >>somefile
这不是一个很好的解决方案,但是如果您想要快速的原始价值来验证您的假设,就可以完成工作。
grep --line-buffered <process> >>somefile
强制grep输出每行而不进行缓冲
sar
像这样的情况下,sysstat软件包中的(System Activity Reporter)是您的朋友。
另一种方法是结合历史数据进行监视,例如Munin,pnp4nagios,rrdtools,...
sar
只关注一个过程吗?大多数情况下,它似乎可以监视整个系统
pidstat
sysstat软件包中的命令还提供了一个相当不错的界面,用于报告单个进程的统计信息。
我喜欢Sridhar的简单回答,但是在尝试他之前我先做了自己的事情:
import json, psutil, datetime, time
with open('log.txt', 'w') as f:
while True:
json.dump((datetime.datetime.now().isoformat(),
psutil.Process(7274).memory_info()._asdict()), f)
f.write('\n')
f.flush()
time.sleep(1)
基本上,仅在需要结构化输出时才有用。根据需要更改7274。Python 3.5.something也坏了_asdict()
,所以请使用Python 2。
输出文件如下所示:
["2019-03-19T11:21:53.784670", {"rss": 220389376, "vms": 538984448, "shared": 15724544, "text": 303104, "lib": 0, "data": 221364224, "dirty": 0}]
["2019-03-19T11:21:54.786136", {"rss": 220438528, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
["2019-03-19T11:21:55.787555", {"rss": 220495872, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
["2019-03-19T11:21:56.788754", {"rss": 220528640, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]