最近は、急なトラブル対応やなにやらで平日の仕事が進まないので、自宅で集中して仕事を片付けるモードに。サーバー群のリソース状況調査してそれを元にうんたらかんたら。

現状のリソース監視では、あるオープンソースのアプリを使っているのですが、ページキャッシュとしてCachedの値が使われていました(まぁ、snmpの取り方次第なんだけれども…)。

今回はMemFree+Inactiveが欲しいなぁと思ったので、RubyCapistranoで取ってくるタスクを書いてみました。これはらくちん。

task :list_mem, :roles => target_all do
  s = {}
  run %Q$egrep '(MemFree|Inactive)' /proc/meminfo$ do |ch, stream, output|
    host = ch.connection.host.intern
    s[host] ||= {}
    output.each_line do |line|
      next unless line =~ /(\w+):\s*(\d+)\s*kB/
      s[host][$1.intern] = Integer($2) / (1024.0 * 1024)
    end
  end
  s.each_pair do |k, v|
    puts "%8s => %4.1f (MemFree: %4.1f, Inactive: %4.1f)" % [
      k, v[:MemFree] + v[:Inactive], v[:MemFree], v[:Inactive],
    ]
  end
end

   hoge1 => 10.5 (MemFree:  9.8, Inactive:  0.7)
    foo1 =>  1.3 (MemFree:  1.1, Inactive:  0.2)
   hoge2 =>  6.1 (MemFree:  3.0, Inactive:  3.1)
    bar1 =>  3.7 (MemFree:  0.4, Inactive:  3.3)