はじめに
先日の下記の記事で「RHEL6ではバックポートされてMemAvailableが使えるよ」という情報を頂いたので、追加で情報を整理しました。
nopipi.hatenablog.com
RHEL6.6へのMemAvailableのバックポート
MemAvailableは、RHEL6.6でバックポートされてました。というのも、ググったらredhatのナレッジ情報が出てきました。
詳細はログインしないと見れないのですが、MemAvailableは"kernel-2.6.32-504.el6"以上で利用可能とあり、このバージョンがRHEL6.6のカーネルバージョンになります。
Backport "MemAvailable" field to /proc/meminfo in Red Hat Enterprise Linux 6. - Red Hat Customer Portal
使い方
MemAvailableの有効化
デフォルトでは互換性に配慮し非表示に設定されているため、カーネルパラメータvm.meminfo_legacy_layoutを無効する必要があります。
# vim /etc/sysctl.conf vm.meminfo_legacy_layout=0 書き込み後、下記コマンドで反映&確認。 # sysctl -p # sysctl vm.meminfo_legacy_layout vm.meminfo_legacy_layout = 0
表示
RHEL7とは表示位置が違ったり、freeコマンドの表示形式が違うとかありますが、availableがキチンと表示されます。
/proc/meminfo
一番最後の行に表示されます。取ってつけたようなとも思いますが、コード修正の影響を考えたらしょうがないですね。
# cat /proc/meminfo MemTotal: 1020236 kB MemFree: 76136 kB Buffers: 230192 kB Cached: 596980 kB SwapCached: 332 kB Active: 328452 kB Inactive: 519032 kB Active(anon): 3200 kB Inactive(anon): 17380 kB Active(file): 325252 kB Inactive(file): 501652 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 1048572 kB SwapFree: 1046720 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 20084 kB Mapped: 7884 kB Shmem: 268 kB Slab: 72596 kB SReclaimable: 45560 kB SUnreclaim: 27036 kB KernelStack: 1312 kB PageTables: 5976 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 1558688 kB Committed_AS: 108076 kB VmallocTotal: 34359738367 kB VmallocUsed: 138664 kB VmallocChunk: 34359594564 kB HardwareCorrupted: 0 kB AnonHugePages: 2048 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 8192 kB DirectMap2M: 1040384 kB MemAvailable: 813196 kB
freeコマンド
freeコマンドは、"-a"オプションで表示されます。
# free -a total used free shared buffers cached available Mem: 1020236 944480 75756 268 230216 597172 813036 -/+ buffers/cache: 117092 903144 Swap: 1048572 1852 1046720
ちなみに、MemAvailableが無効化(vm.meminfo_legacy_layout=1)の場合、availableは0と表示されます。
# free -a total used free shared buffers cached available Mem: 1020236 944472 75764 268 230248 597192 0 -/+ buffers/cache: 117032 903204 Swap: 1048572 1852 1046720
補足
upstreamカーネルのMemAbailableコミット情報
ちなみにナレッジには以下の通り、upstream(コミュニティのカーネル)からRHEL6バックポートしているよと記載があります。
Backport upstream commit id: 34e431b0ae398fc54ea69ff85ec700722c9da773 to add MemAvailable field to /proc/meminfo in Red Hat Enterprise Linux 6
そして、このgitのコミットIDを探すとupstreamカーネルのコミットとLKMLの情報は以下の通りでした。
kernel/git/torvalds/linux.git - Linux kernel source tree
LKML: Rik van Riel: [RFC PATCH -mm] provide estimated available memory in /proc/meminfo