Vmstat

This is a focused and fast library to get system information like:

  • Memory (free, active, ...)
  • Network Interfaces (name, in bytes, out bytes, ...)
  • CPU (user, system, nice, idle)
  • Load Average
  • Disk (type, disk path, free bytes, total bytes, ...)
  • Boot time
  • Current Task (used bytes and usage time MAC OS X ONLY)

It currently supports:

  • FreeBSD
  • MacOS X
  • Linux (>= 2.6)

It might support (but not tested):

  • OpenBSD
  • NetBSD
  • Older versions of linux

Installation

Add this line to your application's Gemfile:

gem 'vmstat'

And then execute:

$ bundle

Or install it yourself as:

$ gem install vmstat

Usage

Just require the library and make a snapshot or use the distinct methods to just capture parts of the statistics. For further information have a look at the rdoc.

require "vmstat"

Vmstat.snapshot # => #<Vmstat::Snapshot:0x007fe5f22df660
#    @at=2012-10-09 21:48:57 +0200,
#    @boot_time=2012-10-09 18:42:37 +0200,
#    @cpu=
#     [#<struct Vmstat::Cpu
#       num=0,
#       user=187167,
#       system=144466,
#       nice=0,
#       idle=786622>,
#      #<struct Vmstat::Cpu num=1, user=2819, system=1641, nice=0, idle=1113782>,
#      #<struct Vmstat::Cpu num=2, user=158698, system=95186, nice=0, idle=864359>,
#      #<struct Vmstat::Cpu num=3, user=2702, system=1505, nice=0, idle=1114035>,
#      #<struct Vmstat::Cpu num=4, user=140231, system=78248, nice=0, idle=899764>,
#      #<struct Vmstat::Cpu num=5, user=2468, system=1314, nice=0, idle=1114460>,
#      #<struct Vmstat::Cpu num=6, user=120764, system=66284, nice=0, idle=931195>,
#      #<struct Vmstat::Cpu num=7, user=2298, system=1207, nice=0, idle=1114737>],
#    @disks=
#     [#<struct Vmstat::Disk
#       type=:hfs,
#       origin="/dev/disk0s2",
#       mount="/",
#       block_size=4096,
#       free_blocks=51470668,
#       available_blocks=51406668,
#       total_blocks=61069442>],
#    @load_average=
#     #<struct Vmstat::LoadAverage
#      one_minute=1.74072265625,
#      five_minutes=1.34326171875,
#      fifteen_minutes=1.1845703125>,
#    @memory=
#     #<struct Vmstat::Memory
#      pagesize=4096,
#      wired=1037969,
#      active=101977,
#      inactive=484694,
#      free=470582,
#      pageins=102438,
#      pageouts=0,
#      zero_filled=930821373,
#      reactivated=33,
#      purgeable=88184,
#      purged=0,
#      faults=90277275,
#      copy_on_write_faults=668693,
#      lookups=516021,
#      hits=17>,
#    @network_interfaces=
#     [#<struct Vmstat::NetworkInterface
#       name=:lo0,
#       in_bytes=6209398,
#       in_errors=0,
#       in_drops=0,
#       out_bytes=6209398,
#       out_errors=0,
#       type=24>,
#      #<struct Vmstat::NetworkInterface
#       name=:gif0,
#       in_bytes=0,
#       in_errors=0,
#       in_drops=0,
#       out_bytes=0,
#       out_errors=0,
#       type=55>,
#      #<struct Vmstat::NetworkInterface
#       name=:stf0,
#       in_bytes=0,
#       in_errors=0,
#       in_drops=0,
#       out_bytes=0,
#       out_errors=0,
#       type=57>,
#      #<struct Vmstat::NetworkInterface
#       name=:en0,
#       in_bytes=1321276010,
#       in_errors=0,
#       in_drops=0,
#       out_bytes=410426678,
#       out_errors=0,
#       type=6>,
#      #<struct Vmstat::NetworkInterface
#       name=:p2p0,
#       in_bytes=0,
#       in_errors=0,
#       in_drops=0,
#       out_bytes=0,
#       out_errors=0,
#       type=6>],
#    @task=
#     #<struct Vmstat::Task
#      suspend_count=0,
#      virtual_size=2551554048,
#      resident_size=19628032,
#      user_time_ms=28,
#      system_time_ms=83>>

Todo

  • Swap information
  • Reduce the number of memory information gatherd
  • Support more platforms (hp ux, aix, solaris, ...)
  • Server performance information (open file handles, cache sizes, ...)

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request