web-dev-qa-db-ja.com

SNMPメモリ値が `free`と一致しません

これを比較する

#free -m 
キャッシュされた使用済み空き共有バッファーの合計
 Mem:72363 68035 4328 0 522 66294 
-/ + buffers/cache:1218 71145 
スワップ:12291 0 12291 

この:

#snmpwalk -c public -v 2c localhost .1.3.6.1.4.1.2021.4 
 UCD-SNMP-MIB :: memIndex.0 = INTEGER:0 
 UCD-SNMP- MIB :: memErrorName.0 = STRING:swap 
 UCD-SNMP-MIB :: memTotalSwap.0 = INTEGER:12586888 kB 
 UCD-SNMP-MIB :: memAvailSwap.0 = INTEGER:12586784 kB 
 UCD-SNMP-MIB :: memTotalReal.0 = INTEGER:74100516 kB 
 UCD-SNMP-MIB :: memAvailReal.0 = INTEGER:4429580 kB 
 UCD-SNMP-MIB :: memTotalFree.0 = INTEGER:17016364 kB 
 UCD-SNMP-MIB :: memMinimumSwap.0 = INTEGER:16000 kB 
 UCD-SNMP-MIB :: memBuffer.0 = INTEGER:534804 kB 
 UCD-SNMP-MIB :: memCached.0 = INTEGER:44238560 kB 
 UCD-SNMP-MIB :: memSwapError.0 = INTEGER:noError(0)
 UCD-SNMP -MIB :: memSwapErrorMsg.0 = STRING:

Freeが「cache」に66294MBを表示するのに、snmpが「memCached」に約44238MBを表示するのはなぜですか?それは同じではないでしょうか?

MIBを見ると、「memCached」はキャッシュに使用される「物理または仮想」メモリであることがわかります。 (ディスクキャッシュをスワップに入れるとは言わないでください)^^

目標は、snmpを介して実際の空き物理メモリ(つまり、ここではfreeで示される71145)を見つけることです。


より詳しい情報

#cat /proc/meminfo
MemTotal:74100516 kB 
 MemFree:4422092 kB 
バッファ:542168 kB 
キャッシュ:44239460 kB 
 SwapCached:4 kB 
アクティブ:16455504 kB 
非アクティブ:28707308 kB 
 SwapTotal:12586888 kB 
 SwapFree:12586784 kB 
ダーティ:2536 kB 
ライトバック:0 kB 
 AnonPages:381088 kB 
マッピング:252132 kB 
スラブ:23961488 kB 
 S再生可能:23648768 kB 
 SUnreclaim:312720 kB 
 PageTables:7812 kB 
 NFS_Unstable:0 kB 
バウンス:0 kB 
 WritebackTmp:0 kB 
 CommitLimit:49637144 kB 
 Committed_AS:4 kB 
 VmallocTotal:34359738367 kB 
 VmallocUsed:264124 kB 
 VmallocChunk:34359474191 kB 
 HugePages_Total:0 [.____。 :0 
 HugePages_Rsvd:0 
 HugePages_Surp:0 
 Hugepagesize: 2048 kB 
 DirectMap4k:7936 kB 
 DirectMap2M:75481088 kB 
4
Marki

free(1)のマンページから:

cacheページキャッシュとスラブによって使用されるメモリ(/ proc/meminfoのキャッシュとスラブ)

freeにはキャッシュ内のスラブ割り当てが含まれます。 UCD-SNMP-MIBはそうではありません。スラブ割り当てを追加すると、次のようになります。

_UCD-SNMP-MIB::memCached.0 + slab = 44238560 + 23961488
                                 = 68200048 KB
_

これは、freeが報告したもの(67885056 KB)にはるかに近いものです。


実際の空き物理メモリを取得する場合、このMIBで実行できる最善の方法は、概算を取得することです。

_totFree = memAvailReal.0 + memBuffer.0 + memCached.0
        = 4429580        + 534804      + 44238560
        = 49202944 KB
_

これは、freeによって報告された空き+バッファ/キャッシュの値よりも大幅に低くなっています。

Host-RESOURCES-MIBは優れていないことに注意してください。 Stack Overflowの同様の質問については、 私の回答 を参照してください。


新しいカーネルは、実際にはこれに対してより優れたメトリックを提供します。再びfree(1)マンページから:

利用可能

スワップせずに、新しいアプリケーションを起動するために使用できるメモリの量の見積もり。キャッシュまたは空きフィールドによって提供されるデータとは異なり、このフィールドはページキャッシュを考慮し、アイテムが使用されているためにすべての再利用可能なメモリスラブが再利用されるわけではありません(MemAvailable in/proc/meminfo、カーネル3.14で利用可能、でエミュレートカーネル2.6.27+、それ以外は無料と同じ)

この値は、空き+バッファ/キャッシュの合計よりも低く、使用可能なメモリのより良いゲージになりますが、_/proc/meminfo_に表示されず、それを使用するMIBが見つかりません。

5