說明:
[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進入配置,修改前如下圖所示
2. 修改Type和Formula
Type選擇Calculated #計算類型
Formula輸入(last("vm.memory.size[total]")-last("vm.memory.size[available]")),用總內存減去可用內存獲得準確的已使用內存。
Formula輸入(100*last("vm.memory.size[available]")/last("vm.memory.size[total]")),用可用內存除以總內存獲得內存使用率。
觸發器:
1. Configuration-->Templates-->Template OS Linux-->Triggers-->create trigger
Name: free mem less 10%
Expression: {Template OS Linux:vm.memory.free[percent].last()}<10
注意:
如果items或者trigger的Status是not suppoted說明表達式可能有問題,需要檢查測試
內存不足10% 這個時候服務器其實內存資源比較緊張,可以利用這個觸發器觸發一個腳本來重啓佔用內存比較多的服務,一般服務器裏面的服務都是比較固定的,吃內存比較多的就是那幾個,可以挑幾個重啓(單實例慎用),而且最好對該服務做好監控,避免自動重啓服務腳本沒有正常啓動服務