说明:

[root@coolnull ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          995        785        209          0          6         92
-/+ buffers/cache:        686        308
Swap:          478        200        278

可用内存:Available memory=free+buffers+cached,即308=209+6+92
已使用内存:Used memory=used-buffers-cached,即686=785-6-92
而在用zabbix自身的Template OS Linux模版监控服务器时,发现Used memory都偏高。这是因为zabbix通过vm.memory.size[used]这个key获取服务器的已使用内存(Used memory)。但vm.memory.size[used]获取的值(如下所示为used 785)还包含buffers、cached这部份。

buffers、cached这部份对服务器来说也是可用的。只不过linux本身是尽可能多地使用内存,只有当内存不足时才会释放buffers、cached空间。
vm.memory.size[available]获取的可用内存倒是挺准确的。因此我们这边就会修改Used memory的key值,让总内存减去可用内存即可获取准确的已使用内存具体:
1. Configure|Templates|Template OS Linux,选择Items,点击Used memory进入配置,修改前如下图所示

z1

2. 修改Type和Formula
Type选择Calculated  #计算类型

Formula输入(last("vm.memory.size[total]")-last("vm.memory.size[available]")),用总内存减去可用内存获得准确的已使用内存。

z4

Formula输入(100*last("vm.memory.size[available]")/last("vm.memory.size[total]")),用可用内存除以总内存获得内存使用率。

zb-1.png

ZB-3.png

查看:

z3

zb-4.png

触发器:

1. Configuration-->Templates-->Template OS Linux-->Triggers-->create trigger
Name:    free mem less 10%
Expression:    {Template OS Linux:vm.memory.free[percent].last()}<10

zb-3.png

注意:

如果items或者trigger的Status是not suppoted说明表达式可能有问题,需要检查测试

内存不足10% 这个时候服务器其实内存资源比较紧张,可以利用这个触发器触发一个脚本来重启占用内存比较多的服务,一般服务器里面的服务都是比较固定的,吃内存比较多的就是那几个,可以挑几个重启(单实例慎用),而且最好对该服务做好监控,避免自动重启服务脚本没有正常启动服务