如何监控内存使用情况?

我用top来看看目前的内存使用情况。 但我想监视一段时间内的内存使用情况。 例如,开始监视然后执行一些命令,最后停止监视并查看在此期间使用了多少内存。

如何在Ubuntu Server上执行此操作?

我想我可以每隔5秒左右启动一个cronjob,并调用一个命令来记录文本文件中当前的内存使用情况。 但是我应该使用什么命令以易于登录文本文件的格式获取当前内存使用情况?

我建议结合之前的答案

 watch -n 5 free -m 

请注意,Linux喜欢使用任何额外的内存来缓存硬盘块 。 所以你不想只看免费的Mem 。 您想查看-/+ buffers/cache:行的free列。 这显示了应用程序可用的内存量。 所以我只是运行free -m得到了这个:

  total used free shared buffers cached Mem: 3699 2896 802 0 247 1120 -/+ buffers/cache: 1528 2170 Swap: 1905 62 1843 

我知道我使用的是1528 MB,并且有2170 MB的空闲空间。

注意:要停止此watch周期,只需按Ctrl + C.

我认为htop是最好的解决方案。

  • sudo apt-get install htop

这样您就会注意到哪些程序使用的RAM最多。 如果你愿意,你可以轻松终止一个。 这是截图!

如果您正在寻找每个正在运行的进程所使用的内存的细分,那么我可能会建议您查看ps_mem.py (可在pixelbeat.org找到)。

我知道在上面的评论中,你提到过想要免费的单行快照,但我认为其他人可能会觉得这很有用。

输出示例:

 user@system:~$ sudo ps_mem.py [sudo] password for user: Private + Shared = RAM used Program 4.0 KiB + 7.5 KiB = 11.5 KiB logger 4.0 KiB + 8.0 KiB = 12.0 KiB mysqld_safe 4.0 KiB + 10.0 KiB = 14.0 KiB getty 4.0 KiB + 42.0 KiB = 46.0 KiB saslauthd (5) 48.0 KiB + 13.0 KiB = 61.0 KiB init 56.0 KiB + 27.5 KiB = 83.5 KiB memcached 84.0 KiB + 26.5 KiB = 110.5 KiB cron 120.0 KiB + 50.0 KiB = 170.0 KiB master 204.0 KiB + 107.5 KiB = 311.5 KiB qmgr 396.0 KiB + 94.0 KiB = 490.0 KiB tlsmgr 460.0 KiB + 65.0 KiB = 525.0 KiB rsyslogd 384.0 KiB + 171.0 KiB = 555.0 KiB sudo 476.0 KiB + 83.0 KiB = 559.0 KiB monit 568.0 KiB + 60.0 KiB = 628.0 KiB freshclam 552.0 KiB + 259.5 KiB = 811.5 KiB pickup 1.1 MiB + 80.0 KiB = 1.2 MiB bash 1.4 MiB + 308.5 KiB = 1.7 MiB fail2ban-server 888.0 KiB + 1.0 MiB = 1.9 MiB sshd (3) 1.9 MiB + 32.5 KiB = 1.9 MiB munin-node 13.1 MiB + 86.0 KiB = 13.2 MiB mysqld 147.4 MiB + 36.5 MiB = 183.9 MiB apache2 (7) --------------------------------- 208.1 MiB ================================= Private + Shared = RAM used Program 

我不喜欢的唯一部分是脚本声称需要root权限。 我还没有机会看到为什么会出现这种情况。

使用free命令。 例如,这是free -m的输出:

  total used free shared buffers cached Mem: 2012 1666 345 0 101 616 -/+ buffers/cache: 947 1064 Swap: 7624 0 7624 

free -m | grep /+ free -m | grep /+只返回第二行:

 -/+ buffers/cache: 947 1064 

watch命令可能很有用。 尝试使用watch -n 5 free监控内存使用情况,每五秒更新一次。

对于整体RAM使用情况的可视化监控,如果您使用Byobu ,它会将您的内存使用量保留在终端的右下角,并在您进入任何终端会话时运行。

从截图中可以看出,我的虚拟机的正常运行时间为1h3m,负载为0.00,系统具有2.8GHz(虚拟)处理器和994MB(21%)RAM。

Byobu在使用中

你可以使用cat /proc/meminfo来做到这一点。

在此处输入图像描述

单线解决方案和输出:

 free -m | grep "Mem:" 

以下是预期输出的示例:

在此处输入图像描述

我会用Cacti 。 这将在一段时间内绘制您的内存使用情况等,您可以使用Web浏览器检查使用情况。

监视内存使用情况

我更加符合前面提到的Cacti作为监视内存使用情况的好方法之一。 然而,由于看起来仙人掌在主流中不再流行,因此有一种名为Graphite的替代图形应用程序。

Graphite相对容易安装在ubuntu服务器上并进行安装,您可以查看此链接以了解易于遵循的安装过程。

安装石墨后,现在,您可以按照您希望的任何间隔向其发送内存指标; 每5秒,每分钟,每小时……等等。

要绘制内存指标,如前面的post中所述,您可以使用系统工具编写自己的脚本来收集必要的内存信息。 或者,您可以使用预先编写的snmp插件,它将为您完成所有工作。

如果您希望编写自己的内存脚本,最好确保在计算已用内存时考虑缓冲和缓存内存,否则,最终会收集错误数据。

如果您希望使用已经为您完成所有必要计算的snmp插件,这里有一个非常有效的链接: checkMemoryviaSNMP 。

SNMP的优点:

我在我监控的所有远程节点上安装了snmp。 这允许我从一个中央服务器监视我的所有系统,而不必在远程节点上复制或插入插件。

SNMP的缺点:

您必须确保在您希望监视内存的每个远程节点上安装snmp代理 。 但是,这次安装将是一次性交易。 如果您在自己的环境中使用自动化工具(如厨师或木偶或类似工具),那么这根本不是问题。

在远程节点上配置SNMP代理:

安装snmp代理后,只需vi /etc/snmpd/snmpd.conf文件并将此行添加到其中:

 rocommunity (specify-a-community-string-aka-password-here) 

然后重新启动snmpd代理,使用:

 /etc/init.d/snmpd restart 

然后,在您的中央服务器上,您可以从中监视所有其他服务器,您可以运行以下命令:

 $ time ./checkMemoryviaSNMP -v2 public gearman001.phs.blah.com 30 90 graphite,10.10.10.10,2003,typical WARNING: Used = [ 3.26154 GB ], Installed = [ 5.71509 GB ], PCT.Used = [ 57.069% ], Available.Memory = [ 2.00291 GB ]. Buffer = [ 137.594 MB ], Cached = [ 1.3849 GB ]. Thresholds: [ W=(30%) / C=(90%) ]. System Information = [ Linux gearman001.phs.blah.com 2.6.32-504.30.3.el6.x86_64 #1 SMP Thu Jul 9 15:20:47 EDT 2015 x86_64 ]. real 0m0.23s user 0m0.03s sys 0m0.02s