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 */
};












