收到zabbix监控报警,提示某台服务器内存不足了:
我登录该服务器,发现内存明显还是充足的:
我在zabbix server服务器上执行命令,以获取客户端的数据:
/usr/local/zabbix/bin/zabbix_get -s 客户端IP -p 10050 -k "vm.memory.size[available]"
得到的结果为:3061157888
这明显不对。
于是想着对比另外一台客户端机器,我们尝试获取另外一台机器的数据:
/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -p 10050 -k "vm.memory.size[available]"
得到的数据为:1391341568
跟我们用free -b查看到的数据基本一致。
最后,尝试性的想着看看/proc/meminfo里的内容,看是否有什么问题。
首先是在正常机器上执行
cat /proc/meminfo
等于说,可用内存 = MemFree + Buffers + Cched
然后在异常的机器上执行
我们发现,异常的机器上多了一个MemAvailable,而MemFree + Buffers + Cached刚好等于2.9G左右
也就是说,zabbix agent在获取available的内存时,是计算的MemFree + Buffers + Cached的总和,而不会单独去获取MemAvailable选项。
所以就导致服务器获取的数据与客户端实际的数据不一致。
为什么会不一致呢?
发现是操作系统版本的问题。
这是异常的机器
这是正常的机器
解决方法:升级客户机上的zabbix agent
修改配置文件之后,再启动
systemctl start zabbix-agent
我们再来服务端上获取数据:
/usr/local/zabbix/bin/zabbix_get -s 124.71.20.200 -p 10092 -k "vm.memory.size[available]"
此时得到的数据是:5935927296
这次就对了。
说明低版本都是计算的 free + buffers + cached的和,并不会直接获取memavailable的值。
标签:available,server,获取,zabbix,服务器,数据,客户端 From: https://www.cnblogs.com/t-road/p/17967258