绘制内存使用情况的简单工具?


14

是否有一个脚本将内存使用情况显示为图表(例如饼图),而每个进程都是一个单独的切片?

我不是在寻找像Munin这样的图表来显示一段时间内的内存使用情况,而是在单个时间点显示每个进程的内存使用情况。

为了使我的请求更加晦涩难懂,它是针对无头服务器的(因此没有X应用程序)。最简单的方法是编写一个PNG文件,或者可能是一个HTML文件(可以使用Javascript允许过滤过程,在图形类型之间进行更改等)。

Answers:


13

出于多种原因,我将在一分钟内介绍每个进程的内存记帐技巧。对于简单的监视,使用gkrellmd或nagios脚本可能就足够了。如果想要更高的准确性,则需要更加努力。

smem引入了比例集大小的概念:

由于物理内存的大部分通常在多个应用程序之间共享,因此称为常驻集大小(RSS)的内存使用量的标准度量将大大高估内存使用量。PSS而是测量每个应用程序在每个共享区域中的“公平份额”,以给出一个实际的度量。

示例:启动GNOME,导致启动多个进程,每个小程序和程序一个。它们都链接到libglib。Linux将libglib加载到一个内存块中,并将其映射到每个需要libglib的进程中。天真的内存核算会根据链接到它的每个进程来计算完整的libglib大小。

smem将libglib的成本分摊到使用它的各个进程中,以更加真实地反映实际情况。它还具有许多显示内存使用情况的选项(来自网站):

  1. 显示基本过程信息smem
  2. 显示系统视图smem -R 4G -K / path / to / vmlinux -w
  3. 显示总计和百分比smem -t -p
  4. 显示不同的列smem -c“名称用户pss”
  5. 显示通过映射smem -M libxml过滤的进程
  6. 显示通过进程smem -m -P [e] volution过滤的映射
  7. 从捕获tarball smem中读取数据--source capture.tar.gz
  8. 显示带有pid smem的条形图--bar pid -c“ pss uss”
  9. 显示名称为smem --pie name -s rss的RSS饼图

但是,您将需要一个非常新的内核(> 2.6.27)。


1
是的,他们关于2.6.27是相当新的建议是可笑的。我知道唯一带有较新内核的发行版是Fedora 10和Ubuntu 9.01。
戴夫·切尼

9.04; Ubuntu 8.10随附2.6.27,但rc3中包含2.6.30。
jldugger,2009年

抱歉,我在RHEL领域花费了很长时间,在2.6.18那里被认为是最新的。
戴夫·切尼


2

看一下sarface-它取决于sar数据,您可以实时监控内存使用情况(以及所有其他sar / sysstat数据)。



1

自己做。制作一个简单的Shell脚本来更新RRD数据库。然后使用rrdtool绘制图形。


1

如果您真的很关注细节,请不要忘记收集。这是可以报告的每个进程内存使用率类型的示例:

记录1 cag-dl585-02(1244758290.002)(2009年6月11日星期四18:11:30)

过程摘要(计数器为/秒)
#PID用户S VmSize VmLck VmRSS VmData VmStk VmExe VmLib MajF MinF命令
 9089根S 66856K 0 2328K 1440K 212K 736K 6812K 0 0 sendmail:
 9097 smmsp S 57600K 0 1772K 1304K 204K 736K 5904K 0 0发送邮件:
 9108根S 6428K 0 360K 180K 84K 88K 1944K 0 0 gpm
 9120根S 74808K 0 1136K 476K 520K 48K 1920K 0 0 crond
 9173 xfs S 20904K 0 1828K 1124K 88K 104K 3084K 0 0 xfs

如果您对特定的流程感兴趣,可以指定适当的过滤器(包括显示线程的开关)。

而且,如果您通常对内存感兴趣,它还可以显示slab详细信息,甚至可以输出vmstat格式。当现有工具已经这样做时,为什么要以vmstat格式显示数据?这很容易-通过收集,您可以将统计信息记录到文件中,然后以多种格式播放。

试试吧,你会喜欢的


1
  1. Grep过程。
  2. 解析输出,并以逗号分隔的格式保存在文本文件中。
  3. 在excel中打开以逗号分隔的文件。
  4. 使用excel的图表实用程序为该数据绘制图形。

如果要在不同的时间间隔进行内存快照,请以所需的间隔设置cron作业并运行脚本。

希望有帮助...


0

并不是您要找的东西,但是也许您可以使用此参考文献来使其适应您的需求(查找“每个进程的内存使用情况”)。




0

我没有详细介绍,但是collectl具有生成定界符分隔的输出的选项,因此在gnuplot的情况下,只需生成包含空格的数据即可。它甚至可以很好地加载到excel中。如果需要逗号,可以更改定界符,如果您确实想执行rrd路线(请小心,因为绘图不必与数据匹配!),则可以将分度符更改为冒号,甚至将时间戳更改为UTC。-标记



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.