OK, this now works.
def sys_mem_info
mem_info = Hash(String, Int64).new
File.each_line("/proc/meminfo") do |line|
key, value = line.match(/(.*)?:\s+?(\d+)/).not_nil!.to_s.split
mem_info[key] = value.to_i64
end
mem_info
end
pp sys_mem_info
{"MemTotal:" => 40436388,
"MemFree:" => 21216224,
"MemAvailable:" => 30907248,
"Buffers:" => 2133020,
"Cached:" => 6075404,
"SwapCached:" => 0,
"Active:" => 7332312,
"Inactive:" => 5907564,
"Active(anon):" => 5591920,
"Inactive(anon):" => 0,
"Active(file):" => 1740392,
"Inactive(file):" => 5907564,
"Unevictable:" => 88,
"Mlocked:" => 88,
"SwapTotal:" => 4193292,
"SwapFree:" => 4193292,
"Zswap:" => 0,
"Zswapped:" => 0,
"Dirty:" => 6696,
"Writeback:" => 0,
"AnonPages:" => 5031392,
"Mapped:" => 1139696,
"Shmem:" => 560640,
"KReclaimable:" => 2568336,
"Slab:" => 2735624,
"SReclaimable:" => 2568336,
"SUnreclaim:" => 167288,
"KernelStack:" => 31568,
"PageTables:" => 69804,
"SecPageTables:" => 0,
"NFS_Unstable:" => 0,
"Bounce:" => 0,
"WritebackTmp:" => 0,
"CommitLimit:" => 24411484,
"Committed_AS:" => 14086608,
"VmallocTotal:" => 34359738367,
"VmallocUsed:" => 106140,
"VmallocChunk:" => 0,
"Percpu:" => 7040,
"HardwareCorrupted:" => 0,
"AnonHugePages:" => 0,
"ShmemHugePages:" => 0,
"ShmemPmdMapped:" => 0,
"FileHugePages:" => 0,
"FilePmdMapped:" => 0,
"CmaTotal:" => 0,
"CmaFree:" => 0,
"HugePages_Total:" => 0,
"HugePages_Free:" => 0,
"HugePages_Rsvd:" => 0,
"HugePages_Surp:" => 0,
"Hugepagesize:" => 2048,
"Hugetlb:" => 0,
"DirectMap4k:" => 3312512,
"DirectMap2M:" => 15945728,
"DirectMap1G:" => 23068672}
So now you get everything in /proc/meminfo
, and can do (values for my system):
meminfo = sys_mem_info
puts "Total Memory = #{meminfo["MemTotal:"].format} KB" # => 40,436,388 KB
puts "Swap Memory = #{meminfo["SwapTotal:"].format} KB" # => 4,193,292 KB