2017 年 10 月 03 日
vm.memory.size パラメータについての解説
MIRACLE ZBX または Zabbix で取得できる vm.memory.size パラメータについて解説します。
概要
本ドキュメントでは、MIRACLE ZBX または Zabbix で取得できる vm.memory.size パラメータについて解説します。今回の監視対象は Linux OS とします。
調査対象は MIRACLE ZBX 3.0.10-1 を使用しています。
解説
キー | 詳細 |
---|---|
vm.memory.size[total] | 使用可能な物理メモリの合計値 |
vm.memory.size[buffers] | バッファの値 |
vm.memory.size[cached] | キャッシュの値 |
vm.memory.size[free] | 空きメモリの値 |
vm.memory.size[used] | 現在使用されているメモリの値 |
vm.memory.size[pused] | total に対する used の割合 |
vm.memory.size[available] | 利用可能な物理メモリの合計値 |
vm.memory.size[pavailable] |
total に対する available の割合 |
なお図に表したものが以下になります ( カッコ内は構造体のメンバ )
詳細
それぞれのキーについて解説します
vm.memory.size[total]
35 SET_UI64_RESULT(result, (zbx_uint64_t)info.totalram * info.mem_unit);
sysinfo から取得した totalram の値を返します。
vm.memory.size[buffers]
65 SET_UI64_RESULT(result, (zbx_uint64_t)info.bufferram * info.mem_unit);
sysinfo から取得した bufferram の値を返します。
vm.memory.size[cached]
76 if (NULL == (f = fopen("/proc/meminfo", "r"))) 77 { ...... 82 if (FAIL == (res = byte_value_from_proc_file(f, "Cached:", NULL, &value))) 83 { 84 SET_MSG_RESULT(result, zbx_strdup(NULL, "Cannot obtain the value of Cached from /proc/meminfo.")); 85 goto close; ...... 93 SET_UI64_RESULT(result, value);
/proc/meminfo から Cached: に該当する行を探して値を返します。
vm.memory.size[free]
50 SET_UI64_RESULT(result, (zbx_uint64_t)info.freeram * info.mem_unit);
sysinfo から取得した freeram の値を返します。
vm.memory.size[used]
108 SET_UI64_RESULT(result, (zbx_uint64_t)(info.totalram - info.freeram) * info.mem_unit);
totalram から freeram を引いた値を返します。
vm.memory.size[pused]
129 SET_DBL_RESULT(result, (info.totalram - info.freeram) / (double)info.totalram * 100);
totalram から freeram を引いた値が全体 (totalram) に占める割合を返します。
vm.memory.size[available]
143 if (NULL == (f = fopen("/proc/meminfo", "r"))) 144 { ...... 148 149 if (FAIL == (res = byte_value_from_proc_file(f, "MemAvailable:", "Cached:", &value))) 150 { ...... 155 if (SUCCEED == res) 156 { 157 SET_UI64_RESULT(result, value); 158 ret = SYSINFO_RET_OK; 159 goto close; 160 } 161 162 if (FAIL == (res = byte_value_from_proc_file(f, "Cached:", NULL, &value))) 163 { ...... 176 177 SET_UI64_RESULT(result, (zbx_uint64_t)(info.freeram + info.bufferram) * info.mem_unit + value);
もし /proc/meminfo に "MemAvailable:" があればその値を返し、なければ、 freeram と bufferram,cache の合計値を返します。
cache の取得方法は上記参照
vm.memory.size[pavailable]
218 SET_DBL_RESULT(result, available / (double)total * 100);
available 値が全体 (totalram) に占める割合を返します。
free と available の違い
free と available は、それぞれ別の値を返しています。
free は未使用領域のみの値を返しているのに対して、 available は free に、バッファとキャッシュの値を加えた値を返しています。そのため、 used の値に対して available の値が大きく見えます。
参考
man sysinfo より
struct sysinfo { long uptime; /* Seconds since boot */ unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ unsigned long totalram; /* Total usable main memory size */ unsigned long freeram; /* Available memory size */ unsigned long sharedram; /* Amount of shared memory */ unsigned long bufferram; /* Memory used by buffers */ unsigned long totalswap; /* Total swap space size */ unsigned long freeswap; /* swap space still available */ unsigned short procs; /* Number of current processes */ unsigned long totalhigh; /* Total high memory size */ unsigned long freehigh; /* Available high memory size */ unsigned int mem_unit; /* Memory unit size in bytes */ char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding to 64 bytes */ };