监控Linux系统内存使用情况

监控Linux系统内存使用情况

我们使用 WhatsUp Gold 来监控我们所有的网络服务器。在我们的 Linux 服务器(以及程度相当的 FreeBSD 服务器)上,我遇到了内存监控器方面的一些问题。我们使用 SNMP 和 WUG 从服务器获取数据。SNMP 守护程序在服务器上返回的内存计数器是组合值(已使用、缓存、缓冲区)。现在我的一台服务器如下所示:

[admin@stgwww snmp]$ free -m
             total       used       free     shared    buffers     cached 
Mem:          7872       1656       6216          0        143      1107
-/+ buffers/cache:        404       7467 
Swap:         4867          0       4867

通过 SNMP 返回给 WUG 的值为 1656。据我所知,缓存的 RAM 本质上是空闲的 RAM,但其额外好处是可以保留之前占用的数据,以备再次需要。因此,对于我们想知道实际有多少 RAM 被积极使用的目的而言,我们得到的值具有误导性。如果我们不考虑 WUG 绘制的图表,我们就会误以为实际使用的 RAM 比实际多,而可用的 RAM 却比实际少。

那么监控这个的最佳方法是什么?WUG 允许我编写 SSH 脚本,该脚本可以每 5 分钟左右通过 SSH 进入服务器,执行脚本并返回值(只要它是一个数字值)。借助它,我编写了一个脚本,从上面的示例中提取“404”数字并将其除以总量,得到一个使用百分比值,我将其返回给 WUG 并绘制在从 0 到 100 的图表上。但这似乎太过分了。

我是否应该监控 free+buffers+cached 值?在 WUG 中有没有更好的方法可以做到这一点?有什么想法吗?

答案1

去看看linuxatemyram.com。WUG 会告诉您 Linux 认为已使用的内容(已使用+缓冲区+缓存)。您决定监控的内容(已使用/总计)在我看来是合理的,尤其是对于图表而言,因为它不需要了解系统细节。

答案2

可用内存是可用内存,缓冲区是可以回收的缓存内存。我使用过的大多数监控工具都以累积面积图的形式显示这种差异,该图至少显示了 100% 级别以下的已使用内存、缓存内存和非活动内存以及这些内存的交换。正确了解服务器性能的唯一方法是查看所有这些内存。

如果您只能绘制一个值,我建议您绘制已用内存的图表,并考虑“释放”其余内存。哦,我还会推荐切换监控工具。即使使用默认配置的 munin 也有一个不错的内存图表。

答案3

我推荐神经节:http://ganglia.sourceforge.net/

它负责内存监控并将其划分为多个组成部分。几乎无需配置。您在每个 Linux 机器上安装一个守护进程,然后指定一个中央机器来记录 RRD。

以下是内存图的示例:

图 1

答案4

对于那些(Renan)有兴趣知道我提出的解决方案的人。

我一直在使用自定义 bash 脚本来检索内存(已使用/总计),然后将其转换为百分比。

#!/bin/bash                                                                                                                                                                                                                              

USED=`free -m | grep "buffers/cache" | awk '{print $3}'`
TOTAL=`free -m | grep "Mem:" | awk '{print $2}'`

VALUE=`bc -l <<< "scale=2; (${USED}/${TOTAL})*100" | sed 's/\.[0-9][0-9]//'`

exit $VALUE

然后我使用自定义 SNMP 计数器执行该脚本并返回值。在 snmpd.conf 文件中,它如下所示:

exec   check_mem /usr/share/snmp/check_mem.sh

每个执行脚本都会返回一些 OID,其中包含脚本名称、退出状态、返回值等信息。不幸的是,返回值是一个字符串,而不是整数,因此 WUG 在绘制它时遇到了一些问题(它仍然可以绘制它,但实时图表不起作用)。因此,在这种情况下,我们知道该值将始终低于 100,我将其设置为退出状态,然后轮询该 OID。

要在 WUG 中监控它,请创建自定义 SNMP 性能监视器并监控该执行脚本的退出状态的 OID。然后,您可以创建自定义警报等。

我们已经用了一段时间了,效果很好。希望有帮助!

相关内容