有没有允许记录内存使用情况的工具?


Answers:



12

有时,当需要出现时,我会做:

$ top -d 1 -b |grep <process> >>somefile

这不是一个很好的解决方案,但是如果您想要快速的原始价值来验证您的假设,就可以完成工作。


我认为它简单,优雅。您可能需要grep --line-buffered <process> >>somefile强制grep输出每行而不进行缓冲
Ott Toomet

7

sar像这样的情况下,sysstat软件包中的(System Activity Reporter)是您的朋友。

另一种方法是结合历史数据进行监视,例如Munin,pnp4nagios,rrdtools,...


1
但是可以sar只关注一个过程吗?大多数情况下,它似乎可以监视整个系统
xenoterracide 2011年

3
pidstatsysstat软件包中的命令还提供了一个相当不错的界面,用于报告单个进程的统计信息。
史蒂文D

@xenoterracide史蒂文D得到了答案。我以前不知道这个命令。
基督教徒

4

除了上述sar之外,我还建议您在上面。它保存一个二进制日志,供您以后使用,此外,内存还保存了许多其他信息。


3

您可以尝试Valgrind

Valgrind是用于构建动态分析工具的仪器框架。有Valgrind工具可以自动检测许多内存管理和线程错误,并详细描述程序。您也可以使用Valgrind构建新工具。

Valgrind发行版当前包含六个生产质量工具:一个内存错误检测器,两个线程错误检测器,一个缓存和分支预测探查器,一个生成调用图的缓存和分支预测探查器以及一个堆探查器


虽然从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
saji89

该文件地块详细解释。
肖恩·谢里

0

我喜欢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}]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.