Zabbix で監視しているメモリの buffers + cached の値と、CentOS7 の freeコマンドの buff/cache(バッファとキャッシュの合計)の値がどうもズレてるな〜 とここ最近思っていたのですが、ついつい調査を後回しにしていました。このままだと年を越してしまいそうです(^^;) そこで今回は、Zabbixの監視データとCentOS7の freeコマンドの値が一致しない原因を調べてみました。
症状
Zabbixが取得しているメモリ使用状況の値と free コマンドの値が、ぴったり一致することはないのですが、監視対象が CentOS7 の場合はかなり大きく buffers + cached の値がズレます。CentOS6 ではこのようなことはありませんでした。
Zabbix の buffers + cached = 372,256,768
$ zabbix_get -s 160.16.57.86 -k vm.memory.size[buffers] 0 $ zabbix_get -s 160.16.57.86 -k vm.memory.size[cached] 372256768
free コマンドの buff/cache(バッファとキャッシュの合計)= 651,362,304
$ free -b total used free shared buff/cache available Mem: 2097373184 874344448 571666432 40689664 651362304 948097024 Swap: 4294963200 312852480 3982110720
一致しない原因
一致しない原因はこれでした。
man free(1) より引用 (free from procps-ng 3.3.10)
buffers
Memory used by kernel buffers (Buffers in /proc/meminfo)cache
Memory used by the page cache and slabs (Cached and Slab in /proc/meminfo)buff/cache
Sum of buffers and cache
どういう事かというと、CentOS6 の free コマンドの buffers と cached は /proc/meminfo の Buffers と Cached の値そのまま表示していました。Zabbixが取得している値もぼぼこれと一致します。
$ free -k total used free shared buffers cached Mem: 2054340 207408 1846932 144 9444 54536 -/+ buffers/cache: 143428 1910912 $ cat /proc/meminfo Swap: 0 0 0 MemTotal: 2054340 kB MemFree: 1846932 kB Buffers: 9444 kB Cached: 54536 kB SwapCached: 0 kB
ところが CentOS7 の free コマンド(procps-ng 3.3.10)の cache の定義が /proc/meminfo の Cached + Slab(これもキャッシュの一種です)に変わりました。そのため Buffers + Cached + Slab の合計が buff/cache(バッファとキャッシュの合計)として表示されているのがこのズレの原因です。
$ free -k total used free shared buff/cache available Mem: 2048216 737536 670436 39736 640244 1042332 Swap: 4194300 305340 3888960 $ cat /proc/meminfo MemTotal: 2048216 kB MemFree: 630392 kB MemAvailable: 1003184 kB Buffers: 0 kB Cached: 359104 kB SwapCached: 29404 kB (略) Slab: 282064 kB
つまり Slabキャッシュの分だけ Zabbixの監視データとズレが生じます。
おわりに
メモリが足りなくなればバッファとキャッシュは解放されますので、Zabbix で available(実質的なメモリ空き容量)の値をしっかり監視しておけば、このズレはあまり気にする必要はないでしょう。
コメント